1

ObjectInputStream を使用して巨大なファイルをロードすると、オブジェクト グラフの解決のために、読み取られたすべてのオブジェクトがストリームによってバッファリングされます。
これにより、私の場合は必要のない巨大なメモリ オーバーヘッドが発生します (読み込まれたすべてのオブジェクトは相互に依存しています)。
このバッファをリセットする ObjectOutputStream の reset() メソッドに相当するものはありますか?

コード例:

try (FileInputStream fileInputStream = new FileInputStream(filename);
         BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);
         ObjectInputStream objectInputStream = new ObjectInputStream(bufferedInputStream)) {
  while (object = objectInputStream.readObject()) {
    System.Out.println(object.toString());
  }
}
4

2 に答える 2

3

を呼び出して、送信されたオブジェクト グラフの整合性を破るタイミングを決定するのは、送信者次第ObjectOutputStream.reset()です。受け手ではありません。

注意: あなたのコードはコンパイルされません。

while (object = objectInputStream.readObject()) {
}

これは

try {
    while (true) {
        object = objectInputStream.readObject();
        // ...
    }
}
catch (EOFException exc) {
    // end of stream
}

ストリームの終わりにreadObject()戻るという誤解が海外にあります。nullそうではありません。投げEOFExceptionます。nullを書いたときはいつでも返すことができますnull

于 2013-03-28T06:22:54.633 に答える
0

うーん、すべてではなく、オブジェクト グラフの必要なコンポーネントのみをロードする、ある種の遅延読み込み手法を使用する必要があるようです。

于 2013-03-28T06:08:15.690 に答える