Domanda

I have been looking for an answer to this question but none of others answers worked for me. I am using serialization in android and I serialize one object. Problem is that when I deserializing it I get EOFException and the object won't load. My saving code:

FileOutputStream fileOut = null;
try {
    fileOut = context.openFileOutput("state.ser", Context.MODE_PRIVATE);
    ObjectOutputStream out = new ObjectOutputStream(fileOut);
    out.writeObject(MyObject);
    out.close();
    fileOut.close();
} catch (IOException i) {
    i.printStackTrace();
}

My loading class which throws that exception:

FileInputStream fis;
try {
    fis = context.openFileInput("state.ser");
    ObjectInputStream is = new ObjectInputStream(fis);
    myObject = (MyObject) is.readObject(); //exception thrown from here
    is.close();
} catch (FileNotFoundException e) {
    generateMyObject();
} catch (Exception e) {
    e.printStackTrace();
}

Definition of my object:

public class MyObject implements Serializable {
    private static final long serialVersionUID = 155986L;   
    public MyInnerObject[][] mio = null;
    public Boolean[] unassigned = null; 
}
public class MyInnerObject implements Serializable {
    private static final long serialVersionUID = 1L;    
    public boolean[] legals;
    public int ID;
    public int pos;
}

What am I doing wrong? Thank you for all answers.

EDIT: stack trace

java.io.EOFException
java.io.DataInputStream.readBoolean(DataInputStream.java:69)
java.io.ObjectInputStream.readNewArray(ObjectInputStream.java:1462)
java.io.ObjectInputStream.readNonPrimitiveContent(ObjectInputStream.java:760)
java.io.ObjectInputStream.readObject(ObjectInputStream.java:1981)
java.io.ObjectInputStream.readObject(ObjectInputStream.java:1938)
java.io.ObjectInputStream.readFieldValues(ObjectInputStream.java:1115)
java.io.ObjectInputStream.defaultReadObject(ObjectInputStream.java:455)
java.io.ObjectInputStream.readObjectForClass(ObjectInputStream.java:1347)
java.io.ObjectInputStream.readHierarchy(ObjectInputStream.java:1244)
java.io.ObjectInputStream.readNewObject(ObjectInputStream.java:1833)
java.io.ObjectInputStream.readNonPrimitiveContent(ObjectInputStream.java:762)
java.io.ObjectInputStream.readObject(ObjectInputStream.java:1981)
java.io.ObjectInputStream.readObject(ObjectInputStream.java:1938)
java.io.ObjectInputStream.readNewArray(ObjectInputStream.java:1490)
java.io.ObjectInputStream.readNonPrimitiveContent(ObjectInputStream.java:760)
java.io.ObjectInputStream.readObject(ObjectInputStream.java:1981)
java.io.ObjectInputStream.readObject(ObjectInputStream.java:1938)
java.io.ObjectInputStream.readNewArray(ObjectInputStream.java:1490)
java.io.ObjectInputStream.readNonPrimitiveContent(ObjectInputStream.java:760)
java.io.ObjectInputStream.readObject(ObjectInputStream.java:1981)
java.io.ObjectInputStream.readObject(ObjectInputStream.java:1938)
java.io.ObjectInputStream.readFieldValues(ObjectInputStream.java:1115)
java.io.ObjectInputStream.defaultReadObject(ObjectInputStream.java:455)
java.io.ObjectInputStream.readObjectForClass(ObjectInputStream.java:1347)
java.io.ObjectInputStream.readHierarchy(ObjectInputStream.java:1244)
java.io.ObjectInputStream.readNewObject(ObjectInputStream.java:1833)
java.io.ObjectInputStream.readNonPrimitiveContent(ObjectInputStream.java:762)
java.io.ObjectInputStream.readObject(ObjectInputStream.java:1981)
java.io.ObjectInputStream.readObject(ObjectInputStream.java:1938)
com.example.myApp.Cell.loadState(Cell.java:224)
... rest is only where in app it appeared

Also even that this is only warning, the object doesn't load so I cannot use it.

È stato utile?

Soluzione

I don't know if this can help you, but here it says that serialization in Android can be buggy with large arrays of integers. In your case, you have an array of booleans, which is an integer anyway.

I would try to make tests by stripping some of the serializable data (e.g. serializing only part of the information) to see if the problem is related to the arrays.

Also, this may be obvious, but maybe not... make sure you're not loading a file that has been saved with a different version of your object (e.g. you saved your object doing some test, then you added variables to your class, and now you're trying to de-serialize).

Altri suggerimenti

The file is empty, or short. You must have got an exception when creating it.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top