首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于长期存储的Java序列化

用于长期存储的Java序列化
EN

Software Engineering用户
提问于 2014-09-29 17:40:46
回答 3查看 1.4K关注 0票数 1

我有一个应用程序,它使用大约15,000个Java对象的数据库,每当应用程序启动时,我都要读取这些对象。最初,我一直使用JSON来存储数据,但这有一些问题,主要是速度慢(读取我的低端机器上的所有对象可能需要8-10秒),而且数据库中的对象有指向同一个对象的字段也是非常常见的。Java序列化通过使用对同一个对象的引用来处理这个问题,而使用JSON,我只需编写每个对象的状态,然后在读取过程中对它们进行实习。这也会增大文件的大小。

此数据库的内容将很少更新(可能每月大约更新一次)。我从几乎所有的源代码中都听说,Java序列化对于长期存储来说总是一个糟糕的选择,我理解其中的原因。但是,在这些情况下,这里是否有充分的理由不使用Java序列化?

EN

回答 3

Software Engineering用户

发布于 2014-09-29 20:51:21

虽然你现在并不期望改变你的对象的性质,但是随着时间的推移,你的需求会发生变化。

我强烈建议您考虑使用原生质阿帕奇或类似的设计,而不是依赖默认的Java序列化。

它们的优点包括强大的支持,以避免在小版本更改时的影响,大大提高序列化和反序列化的速度和减少对象的占用空间。

当我这样做时,通常我会将消息版本作为对象上的一个字段。这允许我在序列化期间通过包装该方法来实现版本到版本的更改,如果将来出现这种需要的话。

票数 4
EN

Software Engineering用户

发布于 2014-09-29 21:13:26

我不会长期存储序列化对象。正如其他人已经说过的那样:当您更改类上的一点点内容时(可能您甚至没有注意到),也许您无法加载数据。修好它就太糟了。

我不知道,为什么你需要内存中的所有数据。是吗,因为它在您的软件(主数据)中随时随地都被使用吗?看上去像是“是”

我要做的是:将数据存储在内存数据库中(hsqldb,.)在启动后,将文件转储并在机器上提供文件,我将加载该文件(相当快),然后像使用“普通”数据库一样使用它。

您也可以通过序列化对象来完成这一任务。但我不会再看到任何感觉了。“正常”数据库可以被缓存,并且会非常快。所以查询对象。

票数 0
EN

Software Engineering用户

发布于 2014-09-30 02:07:25

我同意这样的意见,即Java序列化是不稳定的,而且随着类的改变很难维护。我建议将您自己的读/写例程编写成一种人类可以理解并且可以手动编辑的格式(如果需要的话)。您可能可以将其打包为静态数据,这些数据将主要由编译器解析到您的运行时数据结构中。

票数 0
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/257588

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档