Thanks. posted https://github.com/FasterXML/jackson-databind/issues/2007
On Friday, April 20, 2018 at 7:18:11 PM UTC+2, Tatu Saloranta wrote: > > On Fri, Apr 20, 2018 at 7:06 AM, Rad Akefirad <[email protected] > <javascript:>> wrote: > > Hi, > > > > I asked this question on SO and to my surprise I didn't get any answer. > Is > > there anyone here know the answer. > > Thanks in advance. > > > > Regards, > > Rad > > > > PS: the post is: > > > >> Objective: deep copy (or clone) of a Java object > >> One of the suggested ways (almost everywhere) to do it is using > Jackson: > >> > >> > >> > >> MyPojo myPojo = new MyPojo(); > >> ObjectMapper mapper = new ObjectMapper(); > >> MyPojo newPojo = mapper.readValue(mapper.writeValueAsString(myPojo), > >> MyPojo.class); > >> > >> > >> > >> Question: is the following better in any way (e.g. performance)? is > there > >> any drawbacks? > >> > >> > >> > >> MyPojo myPojo = new MyPojo(); > >> ObjectMapper mapper = new ObjectMapper(); > >> MyPojo newPojo = mapper.treeToValue(mapper.valueToTree(myPojo), > >> MyPojo.class); > > (note: thank you for including code from question here -- much > appreciated!) > > Second way should be bit more efficient since it only creates and uses > logical token stream but does not > have to encode JSON and then decode (parse) it to/from token stream. > So that is close to optimal regarding > Jackson. > > About the only thing to make it even more optimal would be to directly > use `TokenBuffer` (which is what Jackson > itself uses for buffering). Something like: > > TokenBuffer tb = new TokenBuffer(); // or one of factory methods > mapper.writeValue(tb, myPojo); > MyPojo copy = mapper.readValue(tb.asParser(), MyPojo.class); > > This would further eliminate construction and traversal of the tree > model. I don't know how big a difference it'll > make, but is not much more code. > > I wonder if it'd make sense to even expose this as new method in > `ObjectMapper`.... like `deepCopyValue(value)`? > > If so, feel free to file an issue for `jackson-databind`: I could > easily add it, although would need to go to new minor/major > version, being API addition. > > -+ Tatu +- > -- You received this message because you are subscribed to the Google Groups "jackson-user" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. For more options, visit https://groups.google.com/d/optout.
