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 をファイルに書き込むと、ファイルを flush() および close() します。次に、それらを読み込んでみます。期待どおりに機能します。

ただし、50 個の MyObjects をファイルに書き込み、flush()、close() してから、ファイルを再度開き、さらに 100 個の MyObjects を書き込むと、ディスク上でファイルサイズが期待どおりに大きくなることがわかりますが、試してみると、 、最初の 50 個のオブジェクト (最初のオープン/クローズから) を読み取ることができるのは、それらの最後に到達すると、次のようになります。

java.io.DataInputStream.readFully
java.io.DataInputStream.readLong

読んで。なぜこれが起こっているのかわかりません。DeflatoerOutputStream/InflaterInputStream を DataOutputStream/DataInputStream から削除すると、これは問題なく機能します (すべて非圧縮)。ここで何が間違っていますか?

前もって感謝します -

4

0 に答える 0