0

我似乎找不到readObject()将其内容传输到对象变量的方法。当我单步执行加载函数时,我得到“temp = (HashMap) ois.readObject();” 在执行此行之前HashMap's,我可以在 的表达式窗口中看到我用 oos 编写的数据,Eclipse因此我知道数据在那里,但是当执行此行时,我IOException会使用EOF. 从我读到的内容来看,这是预期的,但我还没有找到捕捉 EOF 的方法(带有 available() 的循环并且readObjectInt()不起作用)。我在 Android 模拟器上运行它。任何建议,将不胜感激。

public void Save(Pottylog data)
{
    try 
    {
        FileOutputStream fos = openFileOutput("Plog", Context.MODE_PRIVATE);
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        oos.writeObject(data.get());
        oos.close();
    }
    catch (FileNotFoundException ex)
    {
        ex.printStackTrace();
    }
    catch (java.io.IOException e)
    {
        e.printStackTrace();
    }
}

public HashMap<String, Integer> Load()
{
    HashMap<String, Integer> temp = null;

    try 
    {
        FileInputStream fis = openFileInput("Plog");
        ObjectInputStream ois = new ObjectInputStream(fis);
        temp = (HashMap<String, Integer>) ois.readObject();

    } 
    catch (FileNotFoundException e) 
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
        return null;
    } 
    catch (IOException e) 
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } 
    catch (ClassNotFoundException e) 
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
        return null;
    }

    return temp;
}
4

1 回答 1

0

EOFException表示您已到达流的末尾。我不知道您认为您在调试器中看到了什么,但流中没有要读取的对象。catch(EOFException exc)确实有效;此时您应该关闭流并退出读取循环。不要滥用available()作为流测试的结束:这不是它的用途。

于 2013-04-13T04:40:49.240 回答