Problema de deserialización: java.io.StreamCorruptedException: código de tipo no válido: 00
Estoy escribiendo una aplicación de transferencia de archivos Java, y tengo algunos problemas con la deserialización de la clase definida por mí mismo Mensaje de Datagramms.
Otros temas en StackOverflow tienen problemas similares, pero no encontré algo útil desde allí, así que lo siento de antemano si me lo perdí.
entonces, el mensaje de clase es:
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. lo serializo con
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();
}
y, en realidad, enviarlo a través de 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()));
Lo recibo de otro 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());
donde (los bloques try / catch se eliminan aquí)
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 qué puede ser? Lo hice de acuerdo con las instrucciones enhttp://goo.gl/Rq1rMm
¿Dónde y qué hice mal? Verifiqué que pasen los mensajes iniciales (los tengo, pero aquí hay solo una pequeña parte de mi código) y el datagrama en recepción no es nulo. Además, los datagramas enviados y recibidos tienen la misma longitud. Gracias por adelantado.