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
从所包含的输入流中读取此操作需要的字节。
抛出:
问题原因:输入流已经到达末尾。但是,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中有些函数并不稳定。在开发时,要根据实际情况进行选择。