Проблема десериализации - исключение java.io.StreamCorruptedException: неверный код типа: 00

Я пишу Java-приложение для передачи файлов, и у меня возникли некоторые проблемы с десериализацией самостоятельно определенного класса Message from Datagramms.

Другие темы в StackOverflow имеют схожие проблемы, но я не нашел там ничего полезного, поэтому заранее прошу прощения, если пропустил.

Итак, класс Message это:

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

ничего особенного. я сериализую его

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

и, на самом деле, отправить его через дейтаграмму

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

Я получаю это из другого места

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

где (блоки try / catch удаляются здесь)

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

почему это может быть? я сделал это в соответствии с инструкциями наhttp://goo.gl/Rq1rMm
где и что я сделал не так? я проверил, что исходные сообщения проходят (у меня они есть, но здесь только небольшой кусочек моего кода) и датаграмма при получении не является нулевой. Причем отправленные и полученные датаграммы имеют одинаковую длину. Заранее спасибо.