【发布时间】:2012-12-30 23:19:22
【问题描述】:
我正在尝试编写一个程序,用户可以: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");
}
}
在我收到EOFException 之前,请不要建议执行while(true) 之类的操作,因为:
- 我相信这不是异常处理的目的
- 在此之后我还有更多事情要做,所以我不能让程序终止'
【问题讨论】:
-
处理异常不会自动终止程序。
-
呃,等等...您遍历地图的条目集并在地图上使用
.get()来获取值? -
离题,但
in.available()并没有严格按照我认为您的预期进行。available()返回可在不阻塞的情况下读取的字节数 - 但这并不是说(严格来说)这是数据的大小,或者那里没有更多数据。 -
Please do not suggest doing something like while(true) until I get the EOFException because: 1) that isn't what exception handling is for I believe- 你在这里问问题不是为了推迟给更有知识的人吗? -
@user1938670 这不一定是真的。您为什么不尝试您告诉我们不要建议的内容,以便您自己看到。 (作为一个尝试的例子,为什么不把
return;放在catch(EOFException exception)块中?事实上,为什么不尝试在你提供的方法之后调用更多代码?如果失败(它应该' t!),为什么不发布一个屏幕截图(或指向它的链接),向我们展示它做了你担心的事情?
标签: java serialization objectinputstream eofexception