我有一个来自黑匣子的输入流(比如说B)。从这个流进入的所有消息都是序列化的二进制数据,每个消息都以四个字节的int开头。它大部分是日志记录数据,每天运行24小时。我用readInt()方法读取这四个字节。现在,偶尔,主线程会退出EOFException,并使程序崩溃。如何在输入字节流上设置readInt()块?
经过研究,我发现它发生在readInt()时输入流中少于四个字节时发生。我的猜测是缓冲区在连续读取之间的填充速度不够快。我正在考虑的一些可能的解决方案包括在读取之前检查available()(考虑数据量时消耗太多周期),或者在发生异常时重启(听起来像编程不佳)。如果只有我可以阻止使用readInt(),我认为这将是最好的方式。我已经看过readInt()的实现,但它又归结为使用read()进行阻塞。
任何人都知道更好的解决方案吗?
您似乎通过生成文本墙来阻止阅读流程;-)引入一些段落可能会使其更具可读性(并有助于获得答案)。 – 2011-02-03 14:32:27
`readInt()`的方法是什么? – axtavt 2011-02-03 14:37:51
你读什么样的流? – 2011-02-03 14:49:06