(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 +-