【问题标题】:How can I store an object on my hard drive?如何在硬盘上存储对象?
【发布时间】:2013-02-26 19:57:13
【问题描述】:

我正在开展一个项目,该项目使用了可以拥有超过 100,000 个键的几个地图。目前,我在每个运行时使用数据的缩写形式创建地图以节省时间,以便地图只有大约 1,000 个键。但我想用我现有的全部数据进行测试。

我想知道如何在一个类中创建一个映射,然后将该对象保存到硬盘驱动器,然后能够在不同的类中引用该对象,这样我就不需要每次都创建和填充映射我测试班级。我正在使用 Eclipse 编写 Java 类。

编辑:我相信它被称为对象序列化,但如果它被序列化,我是否必须在使用前阅读整个地图?或者它实际上与调用局部变量一样吗?

【问题讨论】:

  • 当然,您可以创建一个文件。但是,您没有告诉我们任何有关键或值的信息,因此很难建议一种方法。
  • 有两种常见的方式:通过数据库或基于文件。
  • 您是在谈论将对象持久化到硬盘驱动器,以便您可以在程序执行之间存储它并在以后运行时重新加载它?或者您是否试图避免将地图完全保存在内存中,以使其存在于硬盘驱动器上,作为某种节省内存的措施?你想在这里完成什么?
  • 我想在硬盘上存储一个对象,我可以像变量一样引用它,或者像引用要读取的 .txt 文件一样。关键是已经创建了一个对象,所以我不必在每次运行时都创建它。

标签: java eclipse serialization hard-drive object-serialization


【解决方案1】:

我有类似的问题。首先我使用HSQLDB。之后我检查了EHCache。而且它有所作为 - 运行速度更快,更容易理解。

您也可以查看NOSQL 页面的“键值/元组存储”段落。你肯定会找到适合你的。

【讨论】:

    【解决方案2】:

    如果您的地图包含可序列化的对象,那么您可以使用序列化直接将地图写入磁盘。例如:字符串、整数的映射

    但是,如果您的地图包含您创建的任何自定义类,则必须通过实现 Serializable interface 使您的类可序列化。

    您可以通过重写 writeObject(ObjectOutputStream s) 进行写入和 readObject(ObjectInputStream ois) 读取类的内容来明确决定使用序列化将类写入磁盘的方式。

    当序列化和反序列化发生时,这些方法,即 writeObject() 和 readObject() 将被隐式调用。在实现这些方法时要小心,因为您必须以与写入相同的顺序读取元素。

    如何实现这些方法的示例:Sample example

    【讨论】:

    • 示例示例的链接已损坏
    【解决方案3】:

    前段时间我遇到了类似的问题。我使用了 Berkeley DB,它非常适合。如果您问我,这是一个不错的选择: http://docs.oracle.com/cd/E17277_02/html/GettingStartedGuide/index.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-14
      • 2022-12-03
      • 1970-01-01
      • 2018-01-20
      相关资源
      最近更新 更多