是否存在缓冲的ObjectInputStream?

我从一个350KB大小的文件反序列化一个对象,并花了相当长的时间。 我的计算机科学TA告诉我,有一种方法可以使用Buffered阅读器和ObjectInputStream来大大提高性能。 但是我在谷歌上找不到任何相关信息。

您使用装饰来缓冲输入流。 喜欢这个

InputStream in = ...; // your underlying stream (eg FileInputStream) ObjectInputStream oin = new ObjectInputStream(new BufferedInputStream(in)); 

这将确保每次调用ObjectInputStream都不会调用基本流,例如OS的文件读取系统调用。 相反,每次调用都转到缓冲的输入流,该输入流获取并缓存数据块(默认为8K),并从中读取。 这更快,因为从流中读取现在是java中的本地方法调用,并且不太经常遇到系统调用的方法调用开销。 缓存一致性和JIT优化也在提高性能方面发挥作用。

不,但您可以使用ObjectInputStream(InputStream in)构造函数

通过将BufferedInputStream作为参数传递给上面的构造函数来创建缓冲对象的intput流。

以下是从文件中读取序列化对象的示例:

 InputStream file = null; try { file = new FileInputStream("Out.test"); InputStream buffer = new BufferedInputStream(file); ObjectInputStream in = new ObjectInputStream(buffer); vector = (Vector)in.readObject(); } catch (Exception e) { e.printStackTrace(); } finally{ if(file != null ) { file.close(); } } 

结帐以下链接:

http://java.sun.com/docs/books/performance/1st_edition/html/JPIOPerformance.fm.html