java - Buffered ObjectInputStream 是否存在?

标签 java performance serialization buffer

我正在从一个大小为 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/

相关文章:

html - 一个http请求可以调用多个css文件吗?

c# - 我可以控制反序列化 JSON 字符串时使用的子类型吗?

java - 如何从 Java 在 BigQuery 中创建分区表?

MySQL在两个索引+排序上的查询性能

java - Spring 和 JPA : error while running JUnit test

python - 快速转换大型 (2.1gb+) 二进制文件(纬度/经度/海拔高度至 ECEF)

javascript - 将工作的 JavaScript 对象序列化为仅保留属性的 JSON?

.net - 如何在不知道类型的情况下反序列化 XML?

Java8 流 : Filter data from two list of command object. 我在做什么还有其他有效的方法吗?

java - 求二的幂的最快方法?