gpt4 book ai didi

java - 如何使 readInt() 阻塞输入字节流?

转载 作者:可可西里 更新时间:2023-11-01 02:34:22 26 4
gpt4 key购买 nike

我有一个输入流来自黑盒(比如 B)。来自这个流的所有消息都是序列化的二进制数据,每条消息都以一个四字节的 int 开头。其中大部分用于记录数据并每天 24 小时运行。我使用 readInt() 方法读取了这四个字节。现在,主线程偶尔会因 EOFException 退出并导致程序崩溃。

经过研究,我发现它发生在 readInt() 时输入流中少于四个字节的情况下。我的猜测是缓冲区在连续读取之间的填充速度不够快。我正在考虑的一些可能的解决方案包括在读取之前检查 available() (考虑到数据量会消耗太多周期)或在发生异常时重新启动(听起来像是糟糕的编程)。如果我能阻止使用 readInt(),那将是最好的方法,我认为。我查看了 readInt() 的实现,但它再次归结为使用 read() 进行阻塞。

有人知道更好的解决方案吗?

最佳答案

调用层次结构中的任何阻塞调用都被“绑定(bind)”以使链上的所有调用都阻塞,因为这两个调用都是同一执行线程的一部分。 DataInputStreamreadInt 方法对底层输入流的 read 方法进行了四次调用,只要没有数据,它肯定会阻塞可用因此您担心“缓冲区填充速度不够快”似乎不合逻辑。

我遇到过这样的异常,在服务器进程终止或断开连接的情况下,在这种情况下,客户端最终读取 -1 并抛出异常。您是否在客户端/服务器代码中吞噬任何类型的异常?您的日志是否显示任何可疑内容?

关于java - 如何使 readInt() 阻塞输入字节流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4887351/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com