在 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);
)
你好,我有下一个代码:
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);
)