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 回答