Homemade 与Java序列化

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (21)

我有一个特定的POJO需要在数据库中保存,当前的设计将其字段指定为单个字符串列,并且向表中添加附加字段不是一个选项。

意思是,对象需要以某种方式序列化。因此,为了实现基本实现,我设计了自己的序列化对象,这意味着将所有字段连接成一个漂亮的字符串,并用我选择的分隔符分隔。但是这很难看,并且可能会导致问题,比如说其中一个字段包含我的分隔符。

所以我尝试了基本的Java序列化,但是从我进行的一个基本测试中,这不知何故变成了非常昂贵的操作(构建ByteArrayOutputStream,ObjectOutputStream等等,对于反序列化来说也是如此)。

那么我有什么选择?序列化对象到数据库的首选方式是什么?

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

提问于
用户回答回答于

Elliot Rusty Harold 在他的XOM库中为对象使用Java Object序列化写了一个很好的论点。同样的原则适用于你。内置的Java序列化特定于Java,易碎且速度慢,因此最好避免。

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

XML和JSON是两个很好的选择。它们是标准化的,基于文本的,灵活的,可读的,并且有很多库支持。他们也会表现出色(有时甚至比Java序列化还要)。

用户回答回答于

可以尝试协议缓冲区,它是Google的一个开源项目,据说它速度很快(生成比XML更短的序列化表单,并且运行速度更快)。它也轻轻处理添加新字段(插入默认值)。

扫码关注云+社区