使用InflaterInputStream读取数据

时间:2012-11-22 15:09:04

标签: java inputstream

我正在做类似

的事情
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,它可以正常工作(都是未压缩的),没有问题。我在这做错了什么?

提前致谢 -

0 个答案:

没有答案