Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java android应用程序中readObject时的EOFEException_Java_Android_Serializable_Objectinputstream_Eofexception - Fatal编程技术网

Java android应用程序中readObject时的EOFEException

Java android应用程序中readObject时的EOFEException,java,android,serializable,objectinputstream,eofexception,Java,Android,Serializable,Objectinputstream,Eofexception,我使用序列化在android应用程序中保存数据。在用户报告无法打开其文件之前,一切都运行良好。 检查了他发送给我的文件后,发现问题是readObject()时出现了EOFEException 我在vim中打开了.ser文件,它不是空的。它看起来和其他可以正常打开的文件一样正常。 当用户保存.ser文件时,没有发生意外 我的问题是: 1.首先使用序列化是错误的决定吗? 2.我的代码在大多数情况下都正常工作,但我可能遗漏了一些最终导致此问题的内容。 3.用户说这个文件对他来说非常重要,所以我真的想找


我使用序列化在android应用程序中保存数据。在用户报告无法打开其文件之前,一切都运行良好。
检查了他发送给我的文件后,发现问题是readObject()时出现了EOFEException

我在vim中打开了.ser文件,它不是空的。它看起来和其他可以正常打开的文件一样正常。
当用户保存.ser文件时,没有发生意外

我的问题是:
1.首先使用序列化是错误的决定吗?
2.我的代码在大多数情况下都正常工作,但我可能遗漏了一些最终导致此问题的内容。
3.用户说这个文件对他来说非常重要,所以我真的想找到一个方法来打开这个文件

以下是如何读取文件的代码:

    FileInputStream f_in = null;
    ObjectInputStream obj_in = null;

    f_in = new FileInputStream(fileName);
    obj_in = new ObjectInputStream (f_in);
    mBlock = (Block)obj_in.readObject();
下面是我用来保存可序列化文件的代码

saveObjToFile(mBlock, mFileName);

static void saveObjToFile(Serializable object, String fileName)                     
throws IOException{
    FileOutputStream f_out = null;
    ObjectOutputStream obj_out  = null;
    try{
        File note_file = new File(fileName);
        f_out = new FileOutputStream(note_file);
        obj_out = new ObjectOutputStream (f_out);
        obj_out.writeObject(object);
        obj_out.flush();
        obj_out.close();
    }finally{
        if (obj_out != null)
            try{
                obj_out.close();
            }catch(IOException e){

            }
        if (f_out != null)
            try{
                f_out.close();
            }catch(IOException e){

            }
    }
}
以下是块定义的代码片段:

public class Block implements Serializable{
        private static final long serialVersionUID = -4369689728261781215L;
        private int mType;
        private byte[] mContent;
        private ArrayList<Block> mChildren = null;
        //... no more attributes.
}
公共类块实现可序列化{
私有静态最终长serialVersionUID=-4369689728261781215L;
私有int-mType;
私有字节[]mContent;
private ArrayList mChildren=null;
//…没有更多属性。
}

在保存可序列化文件的代码中,异常处理在哪里


我认为可以安全地假设,因为您无法读取该文件,所以在写入该文件时引发了异常。在我看来,如果在遇到错误后关闭outputstream,您是否能够恢复文件是值得怀疑的。

EOFEException是正常的!这只意味着你到达了对象流的末尾。如果在读取第一个对象时得到它,则流中没有对象。请注意,它确实有一个对象输出流头,否则您将得到一个不同的异常,因此它不是空的。没有对象。

我检查了处理异常的代码,它捕获并忽略了IOException。你说得对,可能有人提出了一个例外。但我无法想象发生了什么样的异常?下次在编写时发生IOException时,请用户“重试”或“取消”是否有帮助?谢谢您的解释!正如Nick指出的,我猜问题发生在编写对象时。