2016-03-09 4 views
0

В настоящее время я пытаюсь запрограммировать зашифрованный чат, работающий в моей локальной сети. Это код, в котором я пытаюсь десериализовать полученные данные.EOF-Исключение при десериализации байта [] в JAVA

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); 
      } 
     } 

И это метод, который я использую для десериализации этих данных в объект.

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-исключение с помощью этого кода, и я не знаю, как его исправить. Может ли кто-нибудь помочь? Это выход:

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

Как вы писали (с)? И как вы прочитали данные в 'getData()'? – EJP

+0

'public static byte [] toByteArray (Object objekt) throws IOException, ClassNotFoundException { ByteArrayOutputStream bos = new ByteArrayOutputStream(); ObjectOutput out = новый ObjectOutputStream (bos); out.writeObject (objekt); byte [] temp = bos.toByteArray(); out.close(); bos.close(); температура возврата; } ' –

+0

Мы считываем данные через DatagramPacket, это готовый метод calle' .getdata(); ' –

ответ

0

Вам нужно будет сбрасывать байты на передающей стороне, дамп байт на принимающей стороне, сравнить, а затем диагностировать. По-видимому, все байты не проходят через провод (датаграммы имеют ограничения по размеру), или они повреждены.

+0

Знаете ли вы максимальный размер? –

+0

Зависит от конфигурации всех маршрутизаторов в сети. – bmargulies

+0

Хорошо ... но как я могу их разделить? –