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