2011-06-09 71 views
1

并非所有项目都需要数据库。 我目前正在使用的项目不希望任何数据库被使用。相反,它应该使用对象序列化来存档。 该实现会将大量对象序列化/反序列化为文件。 我的问题在于,什么是对象序列化文件的最佳做法?对象序列化到文件的最佳做法

+0

我会将数据写入文本,例如XML或JSon,因此您可以编辑数据并透明地处理数据结构中的微小变化。 – 2011-06-09 14:07:13

+2

您是否只需要一次访问所有对象或对特定对象的任何随机访问? – 2011-06-09 14:10:16

+0

也应该支持对特定对象的随机访问。 – YoK 2011-06-09 14:16:41

回答

3

它很大程度上取决于数据的性质,您将要写入磁盘的类会有多大变化,无论您是需要存储该类的数据还是其数据和代码,以及它是否意图成为人类可读。

Object serialization to a file是一种技术。另一个将您的对象模型翻译为结构化文本记录(CSV,XML等)。通常,如果文件中引用的对象必须相互引用,则需要将引用编码为与该文件相关的ID号,并在解码器重新载入对象时重建引用。

如果您确实需要控制对存储进行编组的方式,您可以通过Externalizable接口对其进行详细控制。当心,一旦你承担了所有的责任,你将需要正确处理它。

至于最佳实践去:

  1. 创建的文件编号为每个对象实例。
  2. 在序列化中对对象的类型进行编码(这是在默认序列化方案中为您完成的)。
  3. 添加一个额外的字段来跟踪类的修订,因为将“旧”对象加载到它们类的较新版本中可能会有问题。
  4. 提供一个可以“转发”的层,将一个已知修订的磁盘对象上的“旧”转换为当前类修订。
3

我会建议协议缓冲区,但现在我建议MessagePack

1

我建议你看看XStream

这是一个将对象序列化为XML并返回的简单库。