0

我正在做类似的事情

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,这可以正常工作(全部未压缩)。我在这里做错了什么?

提前致谢 -

4

0 回答 0