在 OutputStream 中保存一个字节有什么区别

what is the difference saving a byte in OutputStream

你好,我有下一个代码:

package com.jucepho;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;

class Copy{
public Copy(byte[] buffer,int count) {
    this.buffer = buffer;
    this.count = count;
}
private byte[] buffer;
private int count;

public byte[] getBuffer() {
    return buffer;
}
public int getCount() {
    return count;
}
}

public class ReaderTwo {

public static void main(String[] args) throws IOException {
    InputStream is = new FileInputStream("ex.docx");
     OutputStream os = new FileOutputStream("exBu.docx");
     OutputStream os2 = new FileOutputStream("exBu2.docx");
    ArrayList<Copy> lista = new ArrayList<>();
    byte[] buffer = new byte[4096];
    int count;
    while ((count = is.read(buffer)) > 0)
    {
           os.write(buffer, 0, count);
        lista.add(new Copy(buffer,count));
    }

    for(Copy c: lista) {
        os2.write(c.getBuffer(), 0, c.getCount());
    }


}

}

我想读取一个超过 5 GB 的文件以保存它。所以我看到我必须这样阅读它()

我的问题是,为什么

OutputStream os = new FileOutputStream("exBu.docx");

复制数据好,我的意思是文件是正确的但是

OutputStream os2 = new FileOutputStream("exBu2.docx");

不正确,已损坏或者我不知道为什么我也这样做,对吗?我在我的 ArrayList 中保存了相同的信息,所以为什么我的文件已损坏。 (是的,我需要将所有信息保存在一个名为 Copy 的对象中,因为我将使用序列化并将其保存在其他 HD 中)

谢谢

new Copy(buffer,count)

这不会创建新的 byte[],它只是将相同的数组一遍又一遍地传递到 Copy 实例;下次您将数据读入该数组时,您将覆盖所有先前 Copy 个实例中的数组内容。

如果想让Copy不变,复制缓冲区:

new Copy(Arrays.copyOf(buffer, count), count)

(或者在构造函数中做:this.buffer = Arrays.copyOf(buffer, count);