如何将一个对象存储到我的硬盘上?

7
我正在处理一个项目,其中使用了几个地图,每个地图可能有超过100,000个键。目前,我在每次运行时都使用数据的缩写形式来创建地图,以节省时间,使地图只有大约1,000个键。但是我想测试我所拥有的全部数据。
我想知道如何在类中创建一个地图,然后将该对象保存到硬盘上,然后能够在不同的类中引用该对象,以便在测试类时无需每次创建和填充地图。我使用Eclipse在Java中编写类。
编辑:我认为它被称为对象序列化,但如果序列化,我是否需要在使用之前读取整个地图?或者它是否有效地相当于调用本地变量?

3
这个对你有帮助吗:https://dev59.com/WnI_5IYBdhLWcg3wEe1u? - NPE
当然,你可以创建一个文件。但是,你并没有告诉我们任何关于键或值的信息,这使得很难建议一种方法。 - Jon Skeet
1
有两种常见的方式:通过数据库或基于文件。 - s_bei
3
你是在讨论将一个对象持久化到硬盘上,以便在程序执行期间存储它,并在以后重新加载它吗?还是你试图避免完全在内存中拥有地图,以此作为某种节省内存的措施?你在这里想要实现什么目标? - Andrzej Doyle
我想在硬盘上存储一个对象,可以像变量一样引用它,或者像读取 .txt 文件一样引用它。重点是要有一个已经创建的对象,这样我就不必在每个运行时都创建它。 - Bradley Oesch
使用 ObjectOutputStream - shuangwhywhy
3个回答

1
我曾经遇到过类似的问题。首先我使用了HSQLDB。然后我检查了EHCache。这使得它更快,更易于理解。
你还可以查看NOSQL页面,第"Key Value / Tuple Store"段落。肯定会有适合你的东西。

1
如果您的地图包含可序列化的对象,则可以直接使用序列化将地图写入磁盘。例如:Map of String,Integer。
但是,如果您的地图持有任何自定义类,则必须通过实现Serializable接口使类可序列化。
您可以通过覆盖writeObject(ObjectOutputStream s)来显式决定如何将类写入磁盘,以进行序列化,以及通过readObject(ObjectInputStream ois)来读取类的内容。
这些方法即writeObject()和readObject()将在序列化和反序列化发生时隐式调用。在实现这些方法时要小心,因为您必须按照写入的相同顺序读取元素。
示例实现这些方法的示例:Sample example

示例样本的链接已损坏。 - gordon613

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接