Problema de desserialização - java.io.StreamCorruptedException: código de tipo inválido: 00
Estou escrevendo um aplicativo de transferência de arquivos java e tenho alguns problemas com a deserialização definida pela classe Message from Datagramms.
Outros tópicos no StackOverflow têm problemas semelhantes, mas eu não encontrei algo útil a partir daí, então, desculpe-me antecipadamente por ter esquecido.
então, a classe 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;
}
}
nada especial. eu serializá-lo com
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();
}
e, na verdade, envie pelo datagrama
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()));
Eu recebo de outro lugar por
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());
onde (blocos de tentativa / captura são excluídos aqui)
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;
}
por que pode ser? eu fiz isso de acordo com as instruções emhttp://goo.gl/Rq1rMm
onde e o que eu fiz de errado? Eu verifiquei se as mensagens iniciais passam (eu as tenho, mas aqui está apenas um pequeno pedaço do meu código) e o datagrama no recebimento não é nulo. Além disso, os datagramas enviados e recebidos têm o mesmo comprimento. Desde já, obrigado.