How to reset ObjectInputStream graph cache objects to avoid memory bloat

When loading huge files with an ObjectInputStream, all read objects are buffered by the stream to resolve the object graph.
This causes huge memory overheads that are not needed in my case (all read objects are interdependent).
Is there an equivalent to the reset () method of an ObjectOutputStream object that reset this buffer?

Code example:

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());
  }
}
0
source share
2 answers

, , ObjectOutputStream.reset(). .

NB , :

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

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

, readObject() null . . EOFException. null , null.

+2

, - , , .

0

All Articles