Java中持久化对象的轻量级方法

Java中持久化对象的轻量级方法,java,Java,我正试图设计一种轻量级的方法来用Java存储持久数据。我已经找到了一种非常有效的方法将POJO序列化到DataOutputStreams(或返回),但我正在尝试想出一种好方法来确保在必要时将POJO中的数据更改序列化 这是为一个客户端应用程序设计的,在这个应用程序中,我试图将最终可分发的应用程序的大小保持在尽可能低的水平,因此我不愿意使用任何会带来沉重依赖的东西。现在我的可分配内存几乎是10MB,我不想让它变得更大 我考虑过DB4O,但它太重了,我需要一些轻的。实际上,我需要的可能更多的是一种设

我正试图设计一种轻量级的方法来用Java存储持久数据。我已经找到了一种非常有效的方法将POJO序列化到DataOutputStreams(或返回),但我正在尝试想出一种好方法来确保在必要时将POJO中的数据更改序列化

这是为一个客户端应用程序设计的,在这个应用程序中,我试图将最终可分发的应用程序的大小保持在尽可能低的水平,因此我不愿意使用任何会带来沉重依赖的东西。现在我的可分配内存几乎是10MB,我不想让它变得更大

我考虑过DB4O,但它太重了,我需要一些轻的。实际上,我需要的可能更多的是一种设计模式,而不是一个库


有什么想法吗?

最轻量级的持久化选项几乎肯定只是简单地将一些类标记为可序列化的,并从某个固定位置读/写。你想完成比这更复杂的事情吗?如果是这样的话,是时候捆绑并使用ORM了


如果您的用户精通技术,或者您只是担心初始负载,那么有一些库可以在运行时提取依赖项,例如。

如果您已经有了以字节为单位的压缩数据输出格式(如果您能够高效地持久化到DataOutputStream,我假设您已经有了这种格式)然后,一种有效且通用的技术是对前一个字节数组输出和新字节数组输出之间的差异使用游程编码

注意事项:

  • 如果对象没有更改,字节数组中的差异将是一个零数组,因此将压缩得非常小
  • <> LI>第一次序列化对象时,将前一个输出视为全部零,以便传送完整的数据集
  • 当对象具有可变大小的子结构时,您可能希望有点聪明
  • 您还可以尝试压缩差异,而不是RLE-在某些情况下,如果您有一个包含大量更改的大型对象图,可能会更有效

您是在寻找一个库来检测更改并调用您的序列化层,还是一个实际的序列化层?听起来您应该使用键值(NoSql)数据库。。。有很多占用空间小的纯java的。。。。除非你喜欢从头开始编写自己的数据库只是为了好玩。例如,Berkeleydb(sleepycat)是2m.Femi,关于检测更改,我有一个序列化层。1)您想将对象持久化到哪里?2) 您正在尝试仅保留更改还是完成对象?3) 您是在尝试持久化单个对象还是连接对象图?您尝试实现的目标听起来很像。您可能想查看他们的wiki for ideasI,因为我有自己的序列化程序,所以这不是问题。我的问题更多的是寻找一种设计模式,以确保对象在被修改时被重新写入。在应用程序关闭或用户点击“保存”时写入所有内容有什么错?