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)不会等待输入,因为它意味着什么?
答案 0 :(得分:2)
我相信在另一端关闭套接字后,InputStream.read
将继续返回-1 。
为什么要继续尝试从已从read
返回-1的流中读取?这似乎是我的错误。如果你想保留while(true)
循环,你应该在内部 while循环之后添加break;
语句,这样如果你刚设法到达流的末尾通常没有问题,你可以退出外循环。
顺便说一句,我强烈怀疑在流已经失败后尝试从流中读取也是一个坏主意。
(我还建议您开始关注更常规的Java命名 - 看看PascalCase变量名称是非常奇怪的。看到一个名为Write
的方法也很奇怪 - 这肯定是不是java.io.OutputStream
上的东西...)