Deserialisierungsproblem - java.io.StreamCorruptedException: ungültiger Typcode: 00

Ich schreibe eine Java-Dateiübertragungs-App und habe einige Probleme mit der von mir selbst definierten Deserialisierung der Klassenmeldung aus Datagrammen.

Andere Themen bei StackOverflow haben ähnliche Probleme, aber ich habe von dort aus nichts Hilfreiches gefunden. Es tut mir daher im Voraus leid, wenn ich es verpasst habe.

Also, Klasse Nachricht ist:

import java.io.Serializable;

public class Message implements Serializable {

    private static final long serialVersionUID = 1L;

    private int segmentID;
    private byte[] packet;
    private int bytesToWrite;

    public Message(){
        segmentID = -1;
    }

    public Message(int segmentID, byte[] packet, int bytesToWrite) {
        this.segmentID = segmentID;
        this.packet = packet;
        this.bytesToWrite = bytesToWrite;
    }

    public int getBytesToWrite() {
        return bytesToWrite;
    }

    public int getSegmentID() {
        return segmentID;
    }

    public byte[] getPacket() {
        return packet;
    }
}

nichts Besonderes. Ich serialisiere es mit

public byte[] serialize(Message obj) throws IOException
{
    ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
    ObjectOutputStream objectStream = new ObjectOutputStream(byteStream);
    objectStream.flush();
    objectStream.writeObject(obj);
    objectStream.flush();
    return byteStream.toByteArray();
}

und tatsächlich senden Sie es durch Datagramm

msg = new byte[512];
int bytesRead;
bytesRead = fileReader.read(msg);//fileReader is FileInputStream
Message message = new Message(segmentID, msg, bytesRead);
byte[] test = serialize(message);
datagramSocket.send(new DatagramPacket(test, test.length, 
    datagramSocket.getInetAddress(), datagramSocket.getPort()));

Ich erhalte es von einem anderen Ort von

byte[] buffer = new byte[8192];
DatagramPacket receivedPacket = new DatagramPacket(buffer, buffer.length);
socket.recieve(recievedPacket); //it's already connected by init packet
receiveMSG = (Message) deserialize(receivedPacket.getData(), 
    receivedPacket.getOffset(), receivedPacket.getLength());

wo (try / catch-Blöcke werden hier gelöscht)

private Object deserialize(byte[] bytes, int offset, int length)
{
    ByteArrayInputStream byteStream = new ByteArrayInputStream(bytes, offset, length);
    ObjectInputStream objectStream = new ObjectInputStream(new BufferedInputStream(byteStream));
    Object tmpMsg = new Object();
        tmpMsg = objectStream.readObject();//here catches the EOFException
    return tmpMsg;
}

warum kann es sein Ich habe es nach Anleitung bei gemachthttp://goo.gl/Rq1rMm
wo und was habe ich falsch gemacht? Ich habe überprüft, ob die ersten Nachrichten erfolgreich sind (ich habe sie, aber hier ist nur ein kleiner Teil meines Codes) und Datagramm in Receive ist nicht null. Darüber hinaus sind gesendete und empfangene Datagramme gleich lang. Danke im Voraus.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage