我目前正在尝试编程在我的本地网络中工作的加密聊天。这是我尝试反序列化我收到的数据的代码。
if (dp.getData() != null) {
try {
empfangen = (ArrayList<byte[]>) Serial.toObject(dp.getData());
} catch (IOException | ClassNotFoundException ex) {
Logger.getLogger(Verbindung.class.getName()).log(Level.SEVERE, null, ex);
}
}
这是我用来将这些数据反序列化为Object的方法。
public static Object toObject(byte[] bytes) throws IOException, ClassNotFoundException {
ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
ObjectInput in = new ObjectInputStream(bis);
Object o = in.readObject();
in.close();
bis.close();
return o;
}
但是我得到了这个代码的EOF-Exception,我不知道如何修复它。有人可以帮忙吗? 这是输出:
java.io.EOFException at
java.io.ObjectInputStream$BlockDataInputStream.readFully(ObjectInputStream.java:2754)
at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1688)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1345)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:371)
at java.util.ArrayList.readObject(ArrayList.java:791) at
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497) at
java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1058)
at
java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1900)
at
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1801)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1351)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:371)
at cryptchat.Serial.toObject(Serial.java:50) at
cryptchat.Verbindung$1.run(Verbindung.java:66)
答案 0 :(得分:0)
您需要在发送端转储字节,在接收端转储字节,进行比较,然后进行诊断。显然,所有字节都没有通过线路(数据报确实有大小限制)或者它们已损坏。