目标: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);
这将进一步消除树模型的构造和遍历。我不知道它会产生多大的变化,但是代码不多。
谢谢塔图:)