我正在做类似的事情
FileOutputStream fout = new FileOutputStream("test.dat", true); //appending=true
Deflater d = new Deflater(Deflater.BEST_COMPRESSION);
DataOutputStream outFile = new DataOutputStream(new DeflatorOutputStream(fout, d));
以压缩格式打开用于写入数据的文件。我将数据写入文件:
void writeObject(MyObject o) {
outFile.writeLong(o.getDate().getTime());
outFile.writeChar(o.getValue1());
outFile.writeDouble(o.getValue2());
outFile.writeInt(o.getValue3());
偶尔我会刷新文件,然后关闭它。
我读了以下数据:
FileInputStream fin = new FileInputStream("test.dat");
DataInputStream inFile = new DataInputStream(new InflaterInputStream(fin));
try {
while(true) {
long a = inFile.readLong();
char b = inFile.readChar();
double c = inFile.readDouble();
int d = inFile.readInt()
MyObject m = new MyObject(a,b,c,d);
System.out.println(m.toString());
}
catch (Exception e) { }
现在,当我将一堆 MyObjects 写入文件时,然后刷新()和关闭()文件。然后尝试阅读它们,它按预期工作。
但是,如果我将 50 个 MyObjects 写入文件,flush(),close(),然后重新打开文件,然后再写入 100 个 MyObjects,我看到文件大小在磁盘上按预期增长,但是当我尝试读取,我永远只能读取前 50 个对象(从第一个打开/关闭)到它们的末尾,我得到:
java.io.DataInputStream.readFully
java.io.DataInputStream.readLong
在读。我不知道为什么会这样。如果我从 DataOutputStream/DataInputStream 中删除 DeflatoerOutputStream/InflaterInputStream,这可以正常工作(全部未压缩)。我在这里做错了什么?
提前致谢 -