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,计数)
添加到复制循环中。不要将整个文件保存在内存中。它既浪费时间又浪费空间。我想把它保存在一个文件中并加密。我现在看到了,非常好的解释。哦,我现在看到了,非常好的解释。