【问题标题】:What is the quickest way to load a serialized hashmap in Java?在 Java 中加载序列化 hashmap 的最快方法是什么?
【发布时间】:2013-03-29 14:06:23
【问题描述】:

我已使用 objectstream 和 fileoutputstream 将 HashMap 序列化为文件。这是一个非常庞大的 HashMap,大约有 1.5 亿个条目。当我从文件中读回它时,加载需要很长时间(约 40 分钟)。

我使用 FileOutputStream 后跟 ObjectOutputStream 来序列化对象。然后,我使用 ObjectInputStream 和 FileInputStream 来读取对象。

是否有推荐的方法来读取序列化的 HashMap 以便从文件中快速加载?

【问题讨论】:

  • 是的,使用数据库代替 HashMap。 SQLite、Postgres、MySQL 提供持久性和查询。
  • 您也可以在序列化之前使用GZIPOutputStream 压缩数据,这样文件会更小,写入/读取时间更短:mkyong.com/java/how-to-compress-serialized-object-into-filedocs.oracle.com/javase/7/docs/api/java/util/zip/…
  • 你为什么不告诉我们你是怎么做的?你至少在使用 BufferedInputStream 吗?
  • 我编辑了我的问题,提到了我用来序列化和反序列化 hashmap 的组件。
  • 您是仅保存 HashMap+内容(作为一个)还是仅保存其内容?

标签: java hashmap


【解决方案1】:

使用 BufferedInputStream 应该可以提高性能:

ObjectInputStream in = 
    new ObjectInputStream(new BufferedInputStream(new FileInputStream(file)));

当然,BufferedOutputStream 也会提高序列化的性能。

使用这些缓冲流可以一次性从文件系统中读取大块字节,而不是逐字节读取。阅读文档以获取更多信息。

【讨论】:

  • 这将 30MB 文件的加载时间从 60 秒缩短到 1.5 秒(提高了约 40 倍)。
猜你喜欢
  • 1970-01-01
  • 2010-12-27
  • 1970-01-01
  • 2012-10-30
  • 2023-03-25
  • 2021-05-31
  • 2021-01-06
  • 2011-06-16
  • 1970-01-01
相关资源
最近更新 更多