gpt4 book ai didi

java - Jackson 使用稳定的二进制序列化吗?

转载 作者:行者123 更新时间:2023-11-30 03:17:16 26 4
gpt4 key购买 nike

我有一个外部键值存储,其中每个键包含一组二进制值。这些二进制值是使用 Jackson 2.5 和 ScalaPlugin 序列化的 Scala 对象。

为了在存储中保留集合语义,对象的二进制表示应该是稳定的,即序列化两次应该产生相同的字节序列。 jackson 有这个保证吗?例如,如果它使用 JSON 序列化作为中间步骤,则没有节点排序,因此二进制序列化将不稳定。

如果对象内部包含无序结构(如集合或映射),这可能会变得更加棘手。 jackson 能处理这个问题吗?

如果没有,是否有合理的替代方案?

<小时/>

更新:

我发现com.fasterxml.jackson.databind.SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS解决了部分问题。

最佳答案

您可以使用 this question 的答案中提到的选项 SORT_PROPERTIES_ALPHABETICALLY实现稳定的序列化(与您已经提到的选项 ORDER_MAP_ENTRIES_BY_KEYS 一起)。

these emails 中解释了更多背景信息:
“...在没有显式声明(通过 @JsonPropertyOrder)和通用机制(按字母顺序排序;对象 Id 和类型 Id 位于其他属性之前)的情况下,没有定义的排序。”

“需要注意的一件事是,Oracle 确实改变了 JDK 7 的行为,使得以前由 Introspection 返回的方法和字段的稳定顺序变得任意。” ...“现有的默认排序基于 JDK 提供的简单遍历和排序;...”。
(摘自 Tatu Saloranta 的电子邮件)。

关于java - Jackson 使用稳定的二进制序列化吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32275854/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com