StreamCorruptedException beim Senden von serialisierten Objekten über Bluetooth

Ich habe eine serialisierte Klasse, die ich als Objekt über Bluetooth senden muss, und implementiere auch Runnable. Als solches setze ich zuerst einige Variablen, sende sie dann als Objekt, das von einem anderen Android-Gerät ausgeführt werden soll, und setze dann das Ergebnis in eine Variable und sende dasselbe Objekt mit dem Ergebnis in einer der Variablen zurück. Ich habe die folgenden zwei Methoden verwendet, um mein Objekt zu serialisieren und ein ByteArray abzurufen, bevor ich sie über den OutputStream meines BluetoothSockets gesendet habe, und um dieses ByteArray zu deserialisieren, um mein Objekt zurückzugewinnen.

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

Da diese beiden Methoden immer noch denselben Fehler verursachen, habe ich versucht, ihn mit den Methoden zusammenzuführen, mit denen ich mein ByteArray über den OutputStream von BluetoothSocket versende (siehe Abbildung unten).

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

Am Ende wird derselbe Fehler beim Deserialisieren des Objekts auf dem empfangenden Gerät angezeigt, wie unten gezeigt.

java.io.StreamCorruptedException
at java.io.ObjectInputStream.readStreamHeader (ObjectInputStream.java:2102)
at java.io.ObjectInputStream.<init>(ObjectInputStream.java:372)
and so on...

Kann jemand bitte helfen? Ich bin verzweifelt, das hat mich seit Wochen umgebracht, und ich brauche das, um in ein paar Tagen zu arbeiten. : S

Antworten auf die Frage(1)

Ihre Antwort auf die Frage