目标:深度复制(或克隆)Java对象
建议的方法之一(几乎无处不在)是使用杰克逊:
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);
答案 0 :(得分:5)
Tatu Saloranta回答:
第二种方式应该更高效,因为它只能创建和使用 逻辑令牌流,但不必编码JSON,然后将其解码(解析)到令牌流或从令牌流解析。所以这是接近最佳的 杰克逊。
关于使其更加优化的唯一方法是直接 使用
TokenBuffer
(这是杰克逊自己用来缓冲的)。类似的东西:TokenBuffer tb = new TokenBuffer(); // or one of factory methods mapper.writeValue(tb, myPojo); MyPojo copy = mapper.readValue(tb.asParser(), MyPojo.class);
这将进一步消除树模型的构造和遍历。我不知道它会有多大差异,但代码不多。
谢谢Tatu:)