StreamCorruptedException: invalid stream header

Habe ich eine Klasse Serializer

public class Serializer {

private Serializer() {}

public static byte[] serialize(Object obj) throws IOException {
    ByteArrayOutputStream b = new ByteArrayOutputStream();
    ObjectOutputStream out = new ObjectOutputStream(b);
    out.writeObject(obj);
    return b.toByteArray();
}

public static Object deserialize(byte [] bytes) throws IOException, ClassNotFoundException {
    if (bytes == null) return null;
    ByteArrayInputStream b = new ByteArrayInputStream(bytes);
    ObjectInputStream in = new ObjectInputStream(b);
    return in.readObject();
}
}

Mein client sendet Daten über

private static DataInputStream in;
private static DataOutput out;
...
out.writeInt(bytes.length);
out.write(bytes);

Lese ich es auf diese Weise

int length = in.readInt();
            if (length > 0) {
                byte[] bytes = new byte[length];
                in.readFully(bytes);
                byte[] result = sp.processInput(bytes);
            }

Dann, wenn ich versuche zu Deserialisieren meine Person-Objekt(serializable) wirft er mir eine Fehlermeldung

Person person = (Person) Serializer.deserialize(bytes);
java.io.StreamCorruptedException: invalid stream header: 03ACED00
at model.Serializer.deserialize(Serializer.java:22)

Person-Klasse:

public class Person implements Serializable {
private String creationDate;
private String name;
private String birthDate;
private String city;
private String phoneNumber;
private String email;
private String university;
private String place;
private String reason;
private SerializableImage photo;
private boolean attended;

Kann ich nicht mit einem normalen Bild, denn es ist nicht serialisierbar, so kam ich mit dieser Klasse.

SerializableImage Klasse

public class SerializableImage implements Serializable {
private int width, height;
private int[][] data;

public SerializableImage(Image image) {
    setImage(image);
}

public void setImage(Image image){...}
public Image getImage() {...}

Kann ich nicht verwenden ObjectInputStream in Erster Linie, weil mein byte-array enthält das erste byte, der sagt, was zu tun mit der desirealized Objekt.

Alles war okey, wenn ich geschickt, Streichern und anderen core-Objekte.

Können Sie bitte zeigen, wo ich den Fehler haben?

  • Bitte zeigen Sie ein kurzes, aber komplettes Programm, das wir verwenden können, um das Problem zu reproduzieren. Hinweis: das problem ist wahrscheinlich entweder in der Serialisierung oder in der übertragung. Sollten Sie testen, jede einzeln für sich herausfinden, welche es ist, und dann nur die relevanten einer in Frage.
Schreibe einen Kommentar