Я пытаюсь сериализации, отправлять и получать экземпляр ниже класса (ServerGameDataObject объект = новый ServerGameDataObject())ClassCastException ObjectStreamClass не может быть приведен к java.lang.String при десериализации
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();
}
}
Определение понятия TestClass в нем:
import java.io.Serializable;
public class TestClass implements Serializable{
transient public static final long serialVersionUID = -3089302783006861199L;
private int val =-1;
public TestClass(){
val=-1;
}
}
..... объект передается следующим образом:
ObjectOutputStream o = new AppendingObjectOutputStream(
<some outputstream>);
o.writeUnshared(object);
o.flush();
Определение AppendingObjectOutputStream является:
public class AppendingObjectOutputStream extends ObjectOutputStream {
public AppendingObjectOutputStream(OutputStream out) throws IOException {
super(out);
}
@Override
protected void writeStreamHeader() throws IOException {
// do not write a header, but reset:
// this line added after another question
// showed a problem with the original
reset();
}
}
The code on the receiving end is :
Object o = null;
while ((o = inputStream.readUnshared()) != null) { // this is Receiver.java, line 74
...
}
inputStream is an instance of ObjectInputStream
На приемном конце этого исключение:
> 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 be cast
> to java.lang.String 05-10 10:54:51.572: E/AndroidRuntime(3133): at
> java.io.ObjectInputStream.readFieldDescriptors(ObjectInputStream.java:935)
> 05-10 10:54:51.572: E/AndroidRuntime(3133): at
> java.io.ObjectInputStream.readClassDescriptor(ObjectInputStream.java:1744)
> 05-10 10:54:51.572: E/AndroidRuntime(3133): at
> java.io.ObjectInputStream.readNewClassDesc(ObjectInputStream.java:1656)
> 05-10 10:54:51.572: E/AndroidRuntime(3133): at
> java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:683)
> 05-10 10:54:51.572: E/AndroidRuntime(3133): at
> java.io.ObjectInputStream.readNewObject(ObjectInputStream.java:1806)
> 05-10 10:54:51.572: E/AndroidRuntime(3133): at
> java.io.ObjectInputStream.readNonPrimitiveContent(ObjectInputStream.java:787)
> 05-10 10:54:51.572: E/AndroidRuntime(3133): at
> java.io.ObjectInputStream.readObject(ObjectInputStream.java:2006)
> 05-10 10:54:51.572: E/AndroidRuntime(3133): at
> java.io.ObjectInputStream.readObject(ObjectInputStream.java:1963)
> 05-10 10:54:51.572: E/AndroidRuntime(3133): at
> java.io.ObjectInputStream.readFieldValues(ObjectInputStream.java:1140)
> 05-10 10:54:51.572: E/AndroidRuntime(3133): at
> java.io.ObjectInputStream.defaultReadObject(ObjectInputStream.java:455)
> 05-10 10:54:51.572: E/AndroidRuntime(3133): at
> java.io.ObjectInputStream.readObjectForClass(ObjectInputStream.java:1372)
> 05-10 10:54:51.572: E/AndroidRuntime(3133): at
> java.io.ObjectInputStream.readHierarchy(ObjectInputStream.java:1269)
> 05-10 10:54:51.572: E/AndroidRuntime(3133): at
> java.io.ObjectInputStream.readNewObject(ObjectInputStream.java:1858)
> 05-10 10:54:51.572: E/AndroidRuntime(3133): at
> java.io.ObjectInputStream.readNonPrimitiveContent(ObjectInputStream.java:787)
> 05-10 10:54:51.572: E/AndroidRuntime(3133): at
> java.io.ObjectInputStream.readObject(ObjectInputStream.java:2006)
> 05-10 10:54:51.572: E/AndroidRuntime(3133): at
> java.io.ObjectInputStream.readUnshared(ObjectInputStream.java:1978)
> 05-10 10:54:51.572: E/AndroidRuntime(3133): at
> Receiver.run(Receiver.java:74)
Если внутри ServerGameDataObject определяют t2 преходящие (переходное частное TestClass t2 = NULL;), затем я делаю REICEIVE объектов
Что случилось? Почему я не могу получить как t1, так и t2?
1. Я делаю это уже <некоторые OutputStream> выше получается после первой записи 2. Я буду смотреть в него. Независимо от того, приложение работает, когда один из двух тестовых кластеров является временным. Мне нужно заставить его работать, когда нет преходящего. – user1386187
В этом случае класс, который не работает, вероятно, имеет неправильный метод readObject() или writeObject(). – EJP