Java:InputStream.read不等待输入?

时间:2011-10-11 11:35:11

标签: java inputstream

G'day,我正在研究代理,但socket的输入流之一很奇怪:

while(true) {
        try {
            while ((BytesRead = inputstream.read(Line)) != -1) {
                OtherSocket.Write(Line, BytesRead);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

对于OtherSocket我有几乎相同的东西,但在这一个,它不断重复,好像服务器一直在发送数据,我猜测inputstream.read(Line)不是在等待输入而是返回 - 1。是否有任何理由为什么inputstream.read(Line)不会等待输入,因为它意味着什么?

1 个答案:

答案 0 :(得分:2)

我相信在另一端关闭套接字后,InputStream.read将继续返回-1

为什么要继续尝试从已从read返回-1的流中读取?这似乎是我的错误。如果你想保留while(true)循环,你应该在内部 while循环之后添加break;语句,这样如果你刚设法到达流的末尾通常没有问题,你可以退出外循环。

顺便说一句,我强烈怀疑在流已经失败后尝试从流中读取也是一个坏主意。

(我还建议您开始关注更常规的Java命名 - 看看PascalCase变量名称是非常奇怪的。看到一个名为Write方法也很奇怪 - 这肯定是不是java.io.OutputStream上的东西...)