【发布时间】:2012-07-13 11:57:05
【问题描述】:
有人可以向我解释为什么在注释掉 in.available()>0 的情况下它可以正常工作,但是当我把它放回去时它会中断?
mySocket = new Socket("blahblah", 12345);
BufferedInputStream in = new BufferedInputStream(mySocket.getInputStream());
....
char result[] = new char[length];
for (int i = 0; i < length && !mySocket.isClosed() /*&& in.available()>0*/; i++){
result[i] = (char)in.read();
}
更具体地说:我正在制作一个 Android 应用程序,用户可以在其中搜索一个词,该搜索被发送到空间中的某个东西,我以 xml 形式返回结果,并用它们做一些事情。当我返回的 xml 足够小时(参见上面代码中的“长度”),代码在 in.available()>0 的情况下工作得很好。但如果长度很大,in.available() 返回 0。但是在注释掉之后,一切都会继续顺利进行。
这是为什么呢?这是我需要担心和解决的问题吗?
【问题讨论】:
-
您还应该删除 isClosed() 测试。它不会像你想的那样做:它只会告诉你是否自己关闭了套接字。这不是 EOS 测试:返回 -1 的 read() 告诉你。如果您自己关闭了套接字,那么您首先不应该靠近此代码。
标签: java sockets inputstream blocking bufferedinputstream