Rad*_*Rad 4 java json clone jackson
目标:深层复制(或克隆)Java对象
建议的方法之一(几乎无处不在)使用Jackson:
MyPojo myPojo = new MyPojo();
ObjectMapper mapper = new ObjectMapper();
MyPojo newPojo = mapper.readValue(mapper.writeValueAsString(myPojo), MyPojo.class);
Run Code Online (Sandbox Code Playgroud)
问题:以下是更好的吗?在表现方面?有什么缺点吗?
MyPojo myPojo = new MyPojo();
ObjectMapper mapper = new ObjectMapper();
MyPojo newPojo = mapper.treeToValue(mapper.valueToTree(myPojo), MyPojo.class);
Run Code Online (Sandbox Code Playgroud)
由Tatu Saloranta回答:
第二种方式应该更高效,因为它只创建和使用逻辑令牌流,但不必编码JSON,然后将其解码(解析)到令牌流或从令牌流解析.所以关于杰克逊的情况接近最佳.
关于使其更加优化的唯一方法是直接使用
TokenBuffer(这是杰克逊自己用于缓冲的东西).就像是:Run Code Online (Sandbox Code Playgroud)TokenBuffer tb = new TokenBuffer(); // or one of factory methods mapper.writeValue(tb, myPojo); MyPojo copy = mapper.readValue(tb.asParser(), MyPojo.class);这将进一步消除树模型的构造和遍历.我不知道它会有多大差异,但代码并不多.
谢谢Tatu :)
| 归档时间: |
|
| 查看次数: |
4744 次 |
| 最近记录: |