StreamCorruptedException: invalid stream en-tête

J'ai une classe de Sérialiseur

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

Mon client envoie des données via

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

J'ai lu de cette façon

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

Et puis quand j'essaie de désérialiser mon objet Personne(serializable) il me lance une erreur

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

Classe personne:

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;

Je ne peux pas utiliser d'image ordinaire, car il n'est pas sérialisable, alors je suis venu avec cette classe.

SerializableImage classe

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() {...}

Je ne peux pas utiliser ObjectInputStream, en premier lieu, parce que mon tableau d'octets contient le premier octet dire quoi faire avec le desirealized objet.

Tout est okey quand j'ai envoyé les chaînes et autres objets du noyau.

Pouvez vous s'il vous plaît point où j'ai l'erreur?

  • S'il vous plaît montrer une courte mais complète du programme, nous pouvons utiliser ou de reproduire le problème. Astuce: le problème est susceptible d'être soit dans la sérialisation ou dans la transmission. Vous devez tester chaque séparément pour travailler sur qui il est, et ensuite seulement la pertinence de la question.