java - 哪个是 Java 序列化的最佳替代方案?

标签 java serialization xml-serialization

我目前正在开发一个项目,该项目需要保留任何类型的对象(我们无法控制其实现),以便之后可以恢复这些对象。

我们无法实现 ORM,因为我们无法在开发时限制库的用户。

我们的第一个替代方案是使用 Java 默认序列化对其进行序列化,但是当用户开始传递同一对象的不同版本(属性更改类型、名称等)时,我们在恢复对象时遇到了很多麻烦。

我们尝试过使用 XMLEncoder 类(将对象转换为 XML),但我们发现缺少功能(例如不支持 Enums)。

最后,我们还尝试了 JAXB,但这迫使我们的用户注释他们的类。

有什么好的选择吗?

最佳答案

现在是 2011 年,在商业级 REST Web 服务项目中,我们使用以下序列化程序为客户提供各种媒体类型:

  • XStream (适用于 XML,但不适用于 JSON)
  • Jackson (对于 JSON)
  • Kryo (一种快速、紧凑的二进制序列化格式)
  • Smile (Jackson 1.6 及更高版本附带的二进制格式)。
  • Java 对象序列化。

我们最近尝试了其他序列化器:

  • SimpleXML看起来很稳定,运行速度是 XStream 的 2 倍,但在我们的情况下需要太多配置。
  • YamlBeans有几个错误。
  • SnakeYAML有一个与日期相关的小错误。

Jackson JSON、Kryo 和 Jackson Smile 都比旧的 Java 对象序列化快得多,大约快 3 到 4.5 倍。 XStream 速度较慢。但在这一点上,这些都是可靠的选择。我们将继续监视其他三个。

关于java - 哪个是 Java 序列化的最佳替代方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/239280/

相关文章:

java - 使用 jcrop 和 java 裁剪图像

java - 使用 ObjectMapper 解析 Json 字符串?

java - hawtio - 预定义的远程代理列表

c# - 是否有 XSD 驱动的随机 XML 测试数据生成器?

c# - 如果基类被标记为可序列化,所有子类也被标记了吗?

wcf - 控制 WCF XmlSerializer

java - 为什么 JTables 使 TableModel 在呈现时不可序列化?

java - 将对象转换为 HTTP 请求参数(键/值对)

c# - 如何使用 xs :any/##any and mixed in code generated by the XSD tool 的复杂类型

c# - 禁用特定属性的序列化