StreamCorruptedException ao enviar objetos Serializados via Bluetooth
Eu tenho uma classe Serialized que eu preciso enviar como um objeto via Bluetooth e também implementa Runnable. Como tal, eu configuro algumas variáveis primeiro, depois as envio como um objeto a ser executado por outro dispositivo Android, que então irá definir seu resultado em uma variável, e enviar de volta o mesmo objeto com o resultado em uma das variáveis. Eu tenho usado os dois métodos a seguir para serializar meu objeto e obter um ByteArray antes de enviá-los através do OutputStream do meu BluetoothSocket e desserializar esse ByteArray para recuperar meu objeto.
public static byte[] serializeObject(Object o) throws IOException {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutput out = new ObjectOutputStream(bos);
out.writeObject(o);
out.flush();
out.close();
// Get the bytes of the serialized object
byte[] buf = bos.toByteArray();
return buf;
}
public static Object deserializeObject(byte[] b) throws OptionalDataException, ClassNotFoundException, IOException {
ByteArrayInputStream bis = new ByteArrayInputStream(b);
ObjectInputStream in = new ObjectInputStream(bis);
Object object = in.readObject();
in.close();
return object;
}
Eu ainda tenho o mesmo erro destes dois métodos, então eu tentei mesclar com os métodos que eu uso para enviar o meu ByteArray via OutputStream do BluetoothSocket, como mostrado abaixo.
public void sendObject(Object obj) throws IOException{
ByteArrayOutputStream bos = new ByteArrayOutputStream() ;
ObjectOutputStream out = new ObjectOutputStream( bos );
out.writeObject(obj);
out.flush();
out.close();
byte[] buf = bos.toByteArray();
sendByteArray(buf);
}
public void sendByteArray(byte[] buffer, int offset, int count) throws IOException{
bluetoothSocket.getOutputStream().write(buffer, offset, count);
}
public Object getObject() throws IOException, ClassNotFoundException{
byte[] buffer = new byte[10240];
Object obj = null;
if(bluetoothSocket.getInputStream().available() > 0){
bluetoothSocket.getInputStream().read(buffer);
ByteArrayInputStream b = new ByteArrayInputStream(buffer);
ObjectInputStream o = new ObjectInputStream(b);
obj = o.readObject();
}
return obj;
}
No final, recebo o mesmo erro ao desserializar o objeto no dispositivo receptor, conforme mostrado abaixo.
java.io.StreamCorruptedException
at java.io.ObjectInputStream.readStreamHeader (ObjectInputStream.java:2102)
at java.io.ObjectInputStream.<init>(ObjectInputStream.java:372)
and so on...
Alguém pode por favor ajudar? Estou desesperado, isso tem me matado por semanas e preciso que isso funcione em alguns dias. : S