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.

  1. you must use normal objectoutputstream first write, , appending version when appending. if output socket makes more sense use same objectoutputstream life of socket.

  2. readobject() , readunshared() don't return null @ eos. throw eofexception. looping while don't return null incorrect.


Comments

Popular posts from this blog

c# - Operator '==' incompatible with operand types 'Guid' and 'Guid' using DynamicExpression.ParseLambda<T, bool> -