我的问题与InputStream.read()方法有关- 套接字编程。
我发现的每个来源都指出,当服务器或客户端关闭连接时,会返回“-1”。
但是,“如果”,只是说,“如果”连接关闭但read()不返回“-1”?我们依赖别人的代码。我担心的原因是因为为了读取远程端的输入,必须创建一个无限循环,而我一直被认为远离无限循环。然而,对于 Java,我似乎别无选择!这是一个示例:
int b = 0;
while (true)
{
b = inputStream.read()
if (b == -1) break; // connection closed
}
或者
while (b > -1)
b = inputStream.read()
如果发生了什么事,而 -1 永远不会变成真的怎么办?最终会陷入无限循环,增加某人设备的温度并浪费 CPU 周期!怎么可能确定?
参考文献:[http://developer.android.com/reference/java/io/InputStream.html#read%28%29][1] 和 [http://docs.oracle.com/javase/6/docs/ api/java/io/InputStream.html#read%28byte[],%20int,%20int%29][2]
我想进行故障安全检查。我在循环中所做的也是检查套接字是否变为空,如果是,则中断循环。
while (b > -1)
{
b = inputStream.read()
if (socket == null) break;
if (outputStream == null) break;
}
如果“-1”永远不会变为真,我还能做些什么来确保循环存在?