Java readObject预览数据,但不会读取或传输数据

时间:2013-04-13 04:34:02

标签: java android serialization

我似乎找不到让readObject()将其内容传输到对象变量的方法。当我逐步执行加载函数时,我得到“temp =(HashMap)ois.readObject();”在执行此行之前,我能够看到HashMap's数据在Eclipse的表达式窗口中用oos写的,所以我知道数据在那里,但是当这一行执行时,我跳到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;
}

1 个答案:

答案 0 :(得分:0)

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