BufferedInputStream和Blocking

6 java sockets bufferedinputstream

我正在使用a BufferedInputStream来读取套接字.的BufferedInputStream内容如下:

socketInput.read(replyBuffer, 0, 7);
Run Code Online (Sandbox Code Playgroud)

它是由实例化的

socketInput = new BufferedInputStream(mySocket.getInputStream());
Run Code Online (Sandbox Code Playgroud)

mySocket 被定义为 private Socket mySocket;

mySocket 被实例化 mySocket = new Socket(ipAddress, port);

我已经确认mySocket已连接到我的设备.我可以将数据发送到我的设备; 但是,我没有收到我的设备,原因不明,但这不是问题.

BufferedInputStream如果它没有读取任何数据,我希望我在说100ms之后返回.可以BufferedInputStream设置这样做吗?现在,它无限期地阻止.

小智 5

为套接字指定100ms超时.setSoTimeout


Ern*_*ill 4

使用缓冲流从套接字读取通常是一个坏主意,正是因为这个原因:如果它没有看到足够的数据来填充其内部缓冲区(它将大于 7 个字符!),它将永远等待没有办法让它超时。直接使用SocketInputStream,问题就消失了。

  • 对,就是那样。然后你可以使用“setSoTimeout()”,正如另一张海报所建议的,你会得到你想要的行为。 (4认同)