gstackoverflow gstackoverflow - 14 days ago 6
Java Question

java.io.StreamCorruptedException: invalid type code: 3F when I customize serialization process

Please help to understand cause of problem with serialization.

I have following Target class declaration:

class Line implements Serializable {
int index;

public Line() {
System.out.println("Constructing empty line");
}

Line( int index) {
System.out.println("Constructing line: " + index);
this.index = index;
}

//get and set

public void printInfo() {
System.out.println("Line: " + index);
System.out.println(" Object reference: " + super.toString());
}
}


and following main:

...

FileOutputStream os = new FileOutputStream(fileName);
ObjectOutputStream oos = new ObjectOutputStream(os);
oos.writeObject(line1);
oos.close();
System.out.println("Read objects:");
FileInputStream is = new FileInputStream(fileName);
ObjectInputStream ois = new ObjectInputStream(is);

Line line = (Line) ois.readObject();
line.printInfo();

ois.close();
...


this code works good but if I add to target class following methods:

private void writeObject(ObjectOutputStream oos) throws IOException {
// default serialization
System.out.println("custom serialization!!!!");
oos.defaultWriteObject();
}

private void readObject(ObjectInputStream objectInputStream) throws
IOException, ClassNotFoundException {
System.out.println("custom Deserialization!!!!");
objectInputStream.readObject();
}


I see:

java.io.StreamCorruptedException: invalid type code: 00
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1355)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350)
at io_nio.Line.readObject(SerializationWithReferencesToComplicatedObjects.java:164)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
...


What the cause of the problem?

EJP EJP
Answer

You should be calling ObjectInputStream.defaultReadObject() in your readObject() method. Not ObjectInputStream.readObject().

Comments