Exception

java.io.EOFException

        at java.io.DataInputStream.readByte(Data InputStream.java:243)

        at attInterface.attSimulator.msgReader(attSimulator.java:1297)

        at attInterface.attSimulator.run(attSimulator.java:1231)

        at java.lang.Thread.run(Thread.java:595)

通过索引,找到java帮助文档中关于EOFException类相关的说明:

public class EOFException
   
   
    
    extends 
    
    IOException
   
   
 

当输入过程中意外到达文件或流的末尾时,抛出此异常。

此异常主要被数据输入流用来表明到达流的末尾。注意,其他许多输入操作返回一个特殊值表示到达流的末尾,而不是抛出异常。

 

再查找readByte相关说明:

public final byte readByte()
                    throws IOException

从所包含的输入流中读取此操作需要的字节。
 
 
  
  抛出: 
 
 
 
 
EOFException - 如果此输入流已经到达末尾。
IOException - 该流已关闭并且包含的输入流在关闭后不支持读取操作,或者发生其他 I/O 错误。

问题原因:输入流已经到达末尾。但是,readByte不会阻塞,从而产生异常。

可以将使用到的readByte函数换为read。

public final int read(byte[] b)
               throws IOException
从包含的输入流中读取一定数量的字节,并将它们存储到缓冲区数组 b 中。以整数形式返回实际读取的字节数。在输入数据可用、检测到文件末尾 (end of file) 或抛出异常之前,此方法将一直阻塞。

如果 b 为 null,则抛出 NullPointerException。如果 b 的长度为 0,则不读取字节并返回 0;否则,尝试读取至少一个字节。如果因为流位于文件末尾而没有字节可用,则返回值 -1;否则至少读取一个字节并将其存储到 b 中。

将读取的第一个字节存储到元素 b[0] 中,将下一个字节存储到 b[1] 中,依此类推。读取的字节数至多等于 b 的长度。设 k 为实际读取的字节数;这些字节将存储在从 b[0] 到 b[k-1] 的元素中,b[k] 到 b[b.length-1] 的元素不受影响。

read(b) 方法与以下方法的效果相同:read(b, 0, b.length)

 

总结:java中有些函数并不稳定。在开发时,要根据实际情况进行选择。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值