在Android中读取序列化文件时出现EOFEException

在Android中读取序列化文件时出现EOFEException,android,serialization,eofexception,Android,Serialization,Eofexception,我一直在寻找这个问题的答案,但其他答案都不适合我。我在android中使用序列化,我序列化了一个对象。问题是,当我反序列化它时,我得到了EOFEException,对象将不会加载。 我的保存代码: FileOutputStream fileOut = null; try { fileOut = context.openFileOutput("state.ser", Context.MODE_PRIVATE); ObjectOutputStream out = new Object

我一直在寻找这个问题的答案,但其他答案都不适合我。我在android中使用序列化,我序列化了一个对象。问题是,当我反序列化它时,我得到了EOFEException,对象将不会加载。 我的保存代码:

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();
}
引发该异常的加载类:

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();
}
我的对象的定义:

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;
}
我做错了什么?谢谢你的回答

编辑:堆栈跟踪

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

而且,即使这只是一个警告,对象也没有加载,因此我无法使用它。

文件是空的,或者很短。您在创建它时一定遇到了异常。

我不知道这是否对您有帮助,但它说Android中的序列化可能会出现大量整数数组的问题。 在您的例子中,您有一个布尔数组,它无论如何都是一个整数

我会尝试通过剥离一些可序列化的数据(例如,仅序列化部分信息)来进行测试,以查看问题是否与数组有关


而且,这可能是显而易见的,但可能不是。。。请确保您没有加载使用不同版本的对象保存的文件(例如,您保存了对象进行了一些测试,然后向类中添加了变量,现在您正在尝试反序列化)。

您也应该发布堆栈跟踪。很抱歉,我在编辑中添加了它。不,这正是困扰我的地方。我已经重新检查了它,并且在保存的时候打印了“info”,然后“info”就消失了(我在控制台看到了),但没有例外。这可能就是它。如果我计算我正在保存的所有变量,大约需要300000个布尔值。我将尝试找到不同的状态表示,或者至少不使用整数。非常感谢,我永远不会想到这一点。当我解决它时,我将进行编辑。@user3294807您可以尝试的是,将数组[]替换为采用可序列化接口的ArrayList。我已经更改了我的模型,因此大多数布尔值都是根据需要计算的,现在我只保存了700个布尔值,一切都很好。我真的很感激你的帮助,没有你我是解决不了的。非常感谢。