在JAVA中反序列化byte []时的EOF-异常

时间:2016-03-09 19:18:43

标签: java serialization eof

我目前正在尝试编程在我的本地网络中工作的加密聊天。这是我尝试反序列化我收到的数据的代码。

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)

1 个答案:

答案 0 :(得分:0)

您需要在发送端转储字节,在接收端转储字节,进行比较,然后进行诊断。显然,所有字节都没有通过线路(数据报确实有大小限制)或者它们已损坏。