目标:Java对象的深层复制(或克隆)
建议的方法之一(几乎在任何地方)都是使用Jackson:

MyPojo myPojo = new MyPojo();
ObjectMapper mapper = new ObjectMapper();
MyPojo newPojo = mapper.readValue(mapper.writeValueAsString(myPojo), MyPojo.class);

问题:以下方法更好吗?在性能方面?有什么缺点吗?

MyPojo myPojo = new MyPojo();
ObjectMapper mapper = new ObjectMapper();
MyPojo newPojo = mapper.treeToValue(mapper.valueToTree(myPojo), MyPojo.class);

最佳答案

塔图·萨洛兰塔(Tatu Saloranta)回答:

第二种方法应该更有效,因为它只能创建和使用
逻辑令牌流,但不必编码JSON,然后再与令牌流进行解码(解析)。因此,关于
jackson

使它变得更好的唯一方法就是直接
使用TokenBuffer(Jackson本身用于缓冲)。就像是:

TokenBuffer tb = new TokenBuffer(); // or one of factory methods
mapper.writeValue(tb, myPojo);
MyPojo copy = mapper.readValue(tb.asParser(), MyPojo.class);

这将进一步消除树模型的构造和遍历。我不知道它会产生多大的变化,但是代码不多。

谢谢塔图:)

07-24 09:28