java中dis.readutf报错java.io.EOFException

样例一if((dis.readUTF())!=null){System.out.println(dis.readUTF());}样例二Stringmsg=null;if(... 样例一
if((dis.readUTF())!=null){
System.out.println(dis.readUTF());
}
样例二
String msg=null;
if((msg=dis.readUTF())!=null){
System.out.println(msg);
}

样例一会报出java.io.EOFException
而样例二则正常运行这是为什么?
展开
 我来答
maoyulon
2013-11-28 · 超过13用户采纳过TA的回答
知道答主
回答量:29
采纳率:100%
帮助的人:28.8万
展开全部
样例一,if中读到文件末尾最后一行时,if条件为真,运行里面的语句,此时,已经读写完了文件,再调用readUTF()所以会报错。样例二中判断每次读到的值,当读到结束标识时,if条件为假,结束。
匿名用户
2017-12-13
展开全部
样例一出错的原因:在IF 中已经把dis该输出的值输出完了,光标已经移动了,然后在print中在调用的话他会另外再读取一次,但是已经没有数据让他读取了,所以会出错 例如:假设 dis.readUTF() 读到的值是“123”那么if执行之前光标在 1 前边,if执行之后光标跑到 3 后边了 再在print里边调用的时候光标已经不能再往后走了

样例二不出错是因为dis该输出的数据已经赋予给了msg,还是假设dis.readUTF()的值是“123”在if中读取完成后将“123”赋值给了msg这个变量 ,所以在print输出时输出的时msg这个变量的值,所以这种不会出错,这种错误提醒我们在编写代码时,如果有计算类的判断条件包括for while 等最好是使用运算结果来作为判断的条件,这样也可以节省内存和运算时间;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jamxval
2013-11-29 · TA获得超过6822个赞
知道大有可为答主
回答量:4308
采纳率:82%
帮助的人:1422万
展开全部
很简单,第一个样例中你总共读取了2次,奇数次只用来判断,偶数次只用来输出。所以这种写法是错误的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式