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

Java 在OutputStream中保存一个字节有什么区别,java,file,serialization,inputstream,outputstream,Java,File,Serialization,Inputstream,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

你好,我有下一个代码:

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());
    }


}

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

OutputStream os2 = new FileOutputStream("exBu2.docx");
是不正确的,是腐败的,或者我不知道为什么我也这么做,对吗?我正在我的ArrayList中保存相同的信息,以了解文件损坏的原因。(是的,我需要将所有信息保存在一个名为Copy的对象中,因为我将使用序列化并将其保存在其他HD中)

多谢各位

new Copy(buffer,count)
这不会创建一个新的
字节[]
,它只是将相同的数组一次又一次地传递到
Copy
实例中;下次将数据读入该数组时,将覆盖所有以前的
Copy
实例中的数组内容

如果希望复制保持不变,请复制缓冲区:

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

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

如果希望复制保持不变,请复制缓冲区:

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

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

你到底为什么要这样做?只需将
os2.write(缓冲区,0,计数)
添加到复制循环中。不要将整个文件保存在内存中。它既浪费时间又浪费空间。我想把它保存在一个文件中并加密。你到底为什么要这样做?只需将
os2.write(缓冲区,0,计数)
添加到复制循环中。不要将整个文件保存在内存中。它既浪费时间又浪费空间。我想把它保存在一个文件中并加密。我现在看到了,非常好的解释。哦,我现在看到了,非常好的解释。