serialization - ClassCastException ObjectStreamClass cannot be cast to java.lang.String when deserializing -
i trying serialize, send , receive instance of below class ( servergamedataobject object = new servergamedataobject() )
public class servergamedataobject implements serializable { private static final long serialversionuid = 5410058267505412928l; private testclass t1 =null; private testclass t2 =null; public servergamedataobject(){ t1 = new testclass(); t2 = new testclass(); } } the definition of testclass in :
import java.io.serializable; public class testclass implements serializable{ transient public static final long serialversionuid = -3089302783006861199l; private int val =-1; public testclass(){ val=-1; } } ..... object sent follows:
objectoutputstream o = new appendingobjectoutputstream( <some outputstream>); o.writeunshared(object); o.flush(); the definition of appendingobjectoutputstream is:
public class appendingobjectoutputstream extends objectoutputstream { public appendingobjectoutputstream(outputstream out) throws ioexception { super(out); } @override protected void writestreamheader() throws ioexception { // not write header, reset: // line added after question // showed problem original reset(); } } code on receiving end : object o = null; while ((o = inputstream.readunshared()) != null) { // receiver.java, line 74 ... } inputstream instance of objectinputstream on receiving end exception thrown:
> 05-10 10:54:51.572: e/androidruntime(3133): fatal exception: > thread-134 05-10 10:54:51.572: e/androidruntime(3133): > java.lang.classcastexception: java.io.objectstreamclass cannot cast > java.lang.string 05-10 10:54:51.572: e/androidruntime(3133): @ > java.io.objectinputstream.readfielddescriptors(objectinputstream.java:935) > 05-10 10:54:51.572: e/androidruntime(3133): @ > java.io.objectinputstream.readclassdescriptor(objectinputstream.java:1744) > 05-10 10:54:51.572: e/androidruntime(3133): @ > java.io.objectinputstream.readnewclassdesc(objectinputstream.java:1656) > 05-10 10:54:51.572: e/androidruntime(3133): @ > java.io.objectinputstream.readclassdesc(objectinputstream.java:683) > 05-10 10:54:51.572: e/androidruntime(3133): @ > java.io.objectinputstream.readnewobject(objectinputstream.java:1806) > 05-10 10:54:51.572: e/androidruntime(3133): @ > java.io.objectinputstream.readnonprimitivecontent(objectinputstream.java:787) > 05-10 10:54:51.572: e/androidruntime(3133): @ > java.io.objectinputstream.readobject(objectinputstream.java:2006) > 05-10 10:54:51.572: e/androidruntime(3133): @ > java.io.objectinputstream.readobject(objectinputstream.java:1963) > 05-10 10:54:51.572: e/androidruntime(3133): @ > java.io.objectinputstream.readfieldvalues(objectinputstream.java:1140) > 05-10 10:54:51.572: e/androidruntime(3133): @ > java.io.objectinputstream.defaultreadobject(objectinputstream.java:455) > 05-10 10:54:51.572: e/androidruntime(3133): @ > java.io.objectinputstream.readobjectforclass(objectinputstream.java:1372) > 05-10 10:54:51.572: e/androidruntime(3133): @ > java.io.objectinputstream.readhierarchy(objectinputstream.java:1269) > 05-10 10:54:51.572: e/androidruntime(3133): @ > java.io.objectinputstream.readnewobject(objectinputstream.java:1858) > 05-10 10:54:51.572: e/androidruntime(3133): @ > java.io.objectinputstream.readnonprimitivecontent(objectinputstream.java:787) > 05-10 10:54:51.572: e/androidruntime(3133): @ > java.io.objectinputstream.readobject(objectinputstream.java:2006) > 05-10 10:54:51.572: e/androidruntime(3133): @ > java.io.objectinputstream.readunshared(objectinputstream.java:1978) > 05-10 10:54:51.572: e/androidruntime(3133): @ > receiver.run(receiver.java:74) if inside servergamedataobject define t2 transient (transient private testclass t2 =null; ), reiceive objects
what's wrong? why can not receive both t1 , t2 ?
numerous mistakes here.
you must use normal
objectoutputstreamfirst write, , appending version when appending. if output socket makes more sense use sameobjectoutputstreamlife of socket.readobject(),readunshared()don't returnnull@ eos. throweofexception. looping while don't return null incorrect.
Comments
Post a Comment