我正在从一个大小为 350KB 的文件中反序列化一个对象,这需要相当长的时间。我的计算机科学助教告诉我,有一种方法可以将缓冲读取器与 ObjectInputStream 一起使用,从而大大提高性能。然而,我在 Google 上找不到任何相关信息。
最佳答案
您使用修饰来缓冲输入流。像这样
InputStream in = ...; // your underlying stream (e.g. FileInputStream)
ObjectInputStream oin = new ObjectInputStream(new BufferedInputStream(in));
这将确保每次调用 ObjectInputStream 都不会调用 in
中的基本流,例如 OS 的文件读取系统调用。相反,每次调用都会转到缓冲输入流,它会获取和缓存数据 block (默认为 8K),并从中读取。这样更快,因为从流中读取现在是 java 中的本地方法调用,并且很少遇到系统调用的方法调用开销。缓存一致性和 JIT 优化也在提高性能方面发挥作用。
关于java - Buffered ObjectInputStream 是否存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3365261/