To aid in remote debugging (Java), it\'s useful to be able to request remote servers to send over arbitrary objects to my local machine for inspection.
I think, you want kryo.setInstantiatorStrategy(new StdInstantiatorStrategy());
to avoid constructor invocation.
More info here.
But, if I may ask, why in the world would you want to serialize a PrintWriter
? That is definitely asking for trouble.
Kryo is not a "silver bullet", while its default derializers can work with most classes, that are practical (and even then there are always corner cases for which you need to write custom plugins), you can certainly not expect it to be able to handle every single exotic thing you can come up with (and serializing classes backed by internal jvm-specific code, like sun.*
definitely qualifies as exotic).
This error is pretty common with Kryo. Problem is that UTF_8 class is not public and hence Kryo fails. Adding below custom serializer helped me to resolve it. It would be a good idea to ship below kind of serializer along with Kryo as lot of people struggles with this.
Custom serializer for kryo for UTF-8 and other charsets
This way you are telling Kryo that for all registered Charset classes, call my custom serializer. Where I am just emitting string name.