一尘不染

自制与Java序列化

java

我有一个需要保留在数据库中的POJO,当前设计将其字段指定为单个字符串列,并且不能在表中添加其他字段。

意思是,对象需要以某种方式进行序列化。因此,仅就基本实现而言,我去设计了自己的对象的序列化形式,这意味着将其所有字段连接到一个不错的字符串中,并用我选择的定界符分隔。但这很丑陋,并且会引起问题,例如其中一个字段包含我的定界符。

因此,我尝试了基本的Java序列化,但是从我进行的基本测试来看,这在某种程度上变成了一项非常昂贵的操作(构建ByteArrayOutputStream,ObjectOutputStream等,对于反序列化而言也是如此)。

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

编辑:
这将是我项目中非常常见的操作,因此必须将开销保持在最低水平,而性能至关重要。另外,第三方解决方案也不错,但无关紧要(通常会产生我要避免的开销)


阅读 209

收藏
2020-12-03

共1个答案

一尘不染

Elliot Rusty Harold
在他的XOM库中提出了一个反对将Java
Object序列化用于对象的不错的论点。同样的原则也适用于您。内置的Java序列化是特定于Java的,易碎且缓慢的,因此最好避免。

使用基于字符串的格式时,您大概有正确的主意。正如您指出的那样,问题在于您正在遇到定界符的格式/语法问题。解决方案是使用已构建的格式来处理此问题。如果这是标准格式,那么您还可以潜在地使用其他库/语言来对其进行操作。同样,基于字符串的格式意味着您仅希望通过查看数据就可以理解它。二进制格式删除该选项。

XML和JSON是两个不错的选择。它们是标准化的,基于文本的,灵活的,易读的,并且具有很多库支持。它们的性能也会出奇的好(有时甚至比Java序列化还要
)。

2020-12-03