Slyh: EOFException

Beitrag lesen

Hallo,

...
  byte data[] = new byte[30000];
  packet = new DatagramPacket(data, data.length);
  fromSocket.receive(packet);
  ByteArrayInputStream bais = new ByteArrayInputStream(packet.getData());
  ObjectInputStream ois = new ObjectInputStream(bais);
  ois.readObject();
  ...

Hier bleibt er mir immer an der letzten Zeile hängen, mit dieser Meldung:

java.io.EOFException

Das Problem wird sein, daß das Byte-Array 30000 Bytes groß ist.

Ich spekuliere:
readObject() liest bis zum Ende des Streams -- also bis es ein EOF
erhält -- und versucht dann ein Objekt aus dem zu bauen, was es da
gelesen hat. Der ByteArrayInputStream kriegt ein 30000 Bytes großes
Array, liefert also erst ein "EOF" nachdem alle 30000 Bytes gelesen
wurden. Daraus kriegt readObject() aber kein Objekt gebaut, weil das
Array im hinteren Bereich aus Datenmüll (im Java-Fall lauter 0en)
besteht.

Lösung: Verwende den ByteArrayInputStream-Konstruktor, bei dem du
die Länge mit angeben kannst. Die Länge vom DatagramPacket kriegst
du ja raus...

Gruß
Slyh