Fud*_*get 1 java generics treemap objectinputstream eofexception
我正在尝试编写一个程序,用户可以:1)向联系人添加人员(姓名,电话,电子邮件),2)从联系人中删除一个人,3)从联系人中读取所有人.
我这样做的方式是我要求用户选择并分别做任何事情.对于写入,我只是将一个对象写入该文件.为了删除,我想我会问用户"姓"将用作KEY(因为我正在使用TreeMap)并将删除键上的值(对象).
所以我在这里读书时遇到了问题.我试图像这样读取对象:
public void readContact()
{
TreeMap<String, Contact> contactMap = new TreeMap<String, Contact>();
try
{
ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(
new FileInputStream(file)));
while( in.available() > 0 ) //This line does NOT read
{
Contact c = (Contact)in.readObject();
contactMap.put(c.getLastName(), c);
}
for(Map.Entry contact : contactMap.entrySet() )
{
Contact con = contactMap.get( contact.getKey() );
System.out.println( con.getLastName() + ", " + con.getFirstName() + ": " + con.getPhoneNumber() + "\t" + con.getEmail());
}
}
catch(Exception e)
{
System.out.println("Exception caught");
}
}
Run Code Online (Sandbox Code Playgroud)
请不要建议做while(true)我喜欢的事情,EOFException因为:
在得到EOFException之前,请不要建议做像while(true)这样的事情
这正是我的建议.当您在寻找答案时,根据这样的任意标准限制解决方案空间会适得其反.
因为:
这不是我相信的异常处理
当您正在调用的API抛出异常时,就像这样,您没有任何选择,只能捕获它.无论您如何看待'异常处理是什么',您都要接受API设计人员在设计API时所考虑的内容.
在此之后我还有更多事情要做,所以我不能让程序终止'
所以不要终止它.捕捉EOFException,关闭输入,并打破循环.
我看到更多昂贵的编程时间浪费在"什么是异常处理"上,而不是我真正可以信任的.
| 归档时间: |
|
| 查看次数: |
13458 次 |
| 最近记录: |