我似乎找不到让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;
}
答案 0 :(得分:0)
EOFException
表示您已到达流的末尾。我不知道你在调试器中看到了什么,但是流中没有任何对象可供读取。 catch(EOFException exc)
确实有效;此时你应该关闭流并退出读取循环。不要滥用available()
作为流测试的结束:这不是它的用途。