天哪,我正在开发代理,但套接字的输入流之一很奇怪:
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) 是否有任何原因不等待输入?
最佳答案
我相信在套接字被另一端关闭后,InputStream.read
将继续返回 -1 。
为什么你想继续尝试从已经从 read
返回 -1 的流中读取数据?这对我来说似乎是错误。如果您想保留 while(true)
循环,您应该在内部 while 循环之后放置一个 break;
语句,这样如果您'我们刚刚成功地正常到达流的末尾,没有任何问题,您可以退出外循环。
顺便说一句,我强烈怀疑在流已经失败后尝试读取它也是一个坏主意。
(我还建议您开始遵循更传统的 Java 命名 - 看到 PascalCase 变量名称很奇怪。看到名为 Write
的方法也很奇怪- 这肯定不是 java.io.OutputStream
上的东西...)
关于Java:InputStream.read不等待输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7725394/