我有一个需要持久保存在数据库上的POJO,当前设计将其字段指定为单个字符串列,并且不向表中添加其他字段.
意思是,对象需要以某种方式序列化.所以只是为了基本的实现,我去设计了我自己的对象的序列化形式,这意味着将它的所有字段连接成一个很好的字符串,用我选择的分隔符分隔.但这是相当丑陋的,并且可能会导致问题,比如说其中一个字段包含我的分隔符.
所以我尝试了基本的Java序列化,但是从我进行的一个基本测试来看,这在某种程度上变成了一个非常昂贵的操作(构建一个ByteArrayOutputStream,一个ObjectOutputStream,依此类推,反序列化).
那么我的选择是什么?序列化对象进入数据库的首选方法是什么?
编辑:这将是我项目中非常常见的操作,因此必须将开销保持在最低限度,并且性能至关重要.此外,第三方解决方案很好,但不相关(并且通常产生我试图避免的开销)
Elliot Rusty Harold写了一篇很好的论据反对在他的XOM库中使用Java Object序列化.同样的原则适用于您.内置的Java序列化是特定于Java的,易碎且缓慢的,因此最好避免使用.
您在使用基于字符串的格式时有大致正确的想法.正如您所说,问题在于您遇到了分隔符的格式化/语法问题.解决方案是使用已经构建的格式来处理这个问题.如果这是标准化格式,那么您还可以使用其他库/语言来操作它.此外,基于字符串的格式意味着您只需通过观察数据就可以理解它; 二进制格式删除该选项.
XML和JSON是两个很好的选择; 它们是标准化的,基于文本的,灵活的,可读的,并且有很多库支持.它们的表现也非常出色(有时甚至比Java序列化更快).
您可以尝试使用Protocol Buffers,这是一个来自Google的开源项目,它被认为是快速的(生成比XML更短的序列化形式,并且工作更快).它还可以轻柔地处理新字段的添加(插入默认值).