首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >自制与Java序列化

自制与Java序列化
EN

Stack Overflow用户
提问于 2008-10-28 19:22:08
回答 14查看 6.5K关注 0票数 15

我有一个POJO需要在数据库上持久化,当前的设计将它的字段指定为单个字符串列,并且不能向表中添加额外的字段。

这意味着,对象需要以某种方式序列化。所以为了基本的实现,我设计了我自己的对象的序列化形式,这意味着将它的所有字段连接成一个漂亮的字符串,由我选择的分隔符分隔。但是这是相当丑陋的,并且可能会引起问题,比如如果其中一个字段包含我的分隔符。

因此,我尝试了基本的Java序列化,但从我进行的基本测试来看,这以某种方式变成了一个非常昂贵的操作(构建ByteArrayOutputStream、ObjectOutputStream等,反序列化也是如此)。

那么我有什么选择呢?在数据库中序列化对象的首选方法是什么?

编辑:这将是我的项目中非常常见的操作,因此必须将开销保持在最低限度,并且性能至关重要。此外,第三方解决方案很好,但无关紧要(而且通常会产生开销,这是我试图避免的)

EN

回答 14

Stack Overflow用户

回答已采纳

发布于 2008-10-28 19:47:59

埃利奥特·鲁斯蒂·哈罗德写了一个nice argument,反对对他的XOM库中的对象使用Java对象序列化。同样的原则也适用于你。内置的Java序列化是特定于Java的、脆弱且缓慢的,因此最好避免使用。

在使用基于字符串的格式方面,您大致有了正确的想法。正如您所说的,问题在于您遇到了分隔符的格式/语法问题。解决方案是使用已构建的格式来处理此问题。如果这是一种标准化的格式,那么您还可以使用其他库/语言来操作它。此外,基于字符串的格式意味着您希望通过观察数据就能理解它;二进制格式消除了这一选项。

XML和JSON是这里的两个很好的选择;它们是标准化的、基于文本的、灵活的、可读的,并且有很多库支持。它们的性能也会出人意料地好(有时甚至比Java序列化还要快)。

票数 12
EN

Stack Overflow用户

发布于 2008-10-28 21:59:15

你可以试试Protocol Buffers,它是谷歌的一个开源项目,据说速度很快(比XML生成更短的序列化形式,而且运行速度更快)。它还轻轻地处理新字段的添加(插入默认值)。

票数 12
EN

Stack Overflow用户

发布于 2008-10-28 21:04:41

您需要在您的解决方案中考虑版本控制。数据不兼容是您在任何涉及使用对象的二进制序列化的解决方案中都会遇到的问题。如何将较旧的数据行加载到较新版本的对象中?

因此,上面涉及序列化到名称/值对的解决方案可能是您想要使用的方法。

一种解决方案是将版本号作为字段值之一。当添加、修改或删除新字段时,可以修改版本。

反序列化数据时,可以为每个版本使用不同的反序列化处理程序,这些处理程序可用于将数据从一个版本转换为另一个版本。

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

https://stackoverflow.com/questions/244493

复制
相关文章

相似问题

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