gpt4 book ai didi

java - 该对象与 JSON/XML 之间的(解)编码可能会破坏到什么程度

转载 作者:行者123 更新时间:2023-12-01 04:46:24 31 4
gpt4 key购买 nike

我一直在考虑这两个 JSON 库:

  • 谷歌 Gson
  • JSON.Simple
  • XStream

Google Gson 非常棒,它可以序列化具有无参数构造函数的类对象。 JSON.Simple 非常简洁,具有非常简单易用的 API。然而,这些 JSON/对象映射库在序列化和反序列化方面可能会破坏到什么程度,即无法再编码对象。

对于以下场景:

  • 类的嵌套,即类中的类等
  • 类内类中的非常长的字符串值以及诸如此类的事情
  • 对象的大小,即包含大字节的对象

在什么情况下编码会无法承受碰壁

我只是在这里大声思考,以了解使用此类框架作为我的应用程序的 Backbone 时可能会出现什么问题。以及我们如何预见可能发生的潜在怪癖。

更新:

关于可移植性,我们可以在多大程度上依靠(取消)编码,特别是在处理对象分发时。例如,“序列化”对象通过另一台具有不同 CPU、JVM 等的机器发送,并且旨在“反序列化”并以某种方式使用。

最佳答案

这里有两个限制:JSON 的限制和编码软件的限制。

第一个很明显:

  • JSON 无法序列化图表。 JSON 中只有“内容”,这意味着 JSON 中无法创建循环关系。

代码示例:

class Bar { List<Drink> menu = new ArrayList<Drink>(); }
class Drink { List<Bar> servedIn = new ArrayList<Drink>(); }

public void main() {
Bar b = new Bar();
Drink whiskey = new Drink();
b.menu.add(whiskey);
whiskey.servedIn.add(b);
serialize(b);
// a naive serialization will keep serializing
// a smart serialization will not include the Drink.servedIn field or throw an error
}

第二个限制取决于您的编码软件及其构建方式。简而言之,您将需要对象图两倍的内存:一次用于序列化形式,一次用于非序列化形式。一些解析器更智能,并提供流式传输,从而减少内存需求。

关于java - 该对象与 JSON/XML 之间的(解)编码可能会破坏到什么程度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15783254/

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