我有以下代码从套接字连接中读取输入流:
private ByteBuffer toByteBuffer(BufferedInputStream is) throws IOException {
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
int l;
byte[] data = new byte[256];
while ((l = is.read(data, 0, data.length)) != -1) {
buffer.write(data, 0, l);
}
buffer.flush();
return ByteBuffer.wrap(buffer.toByteArray());
}
在while循环的第一次迭代中,一切都很顺利,我可以将数据放入缓冲区。但后来它被卡在while ((l = is.read(data, 0, data.length)) != -1) {
我认为(我可能错了)这是因为它正在等待来自套接字的更多数据,这是永远不会发生的。
如何处理这种情况/挂起?
答案 0 :(得分:3)
由于你使用的BufferedInputStream
方法没有阻止你得到这样的情况,即只要你的InputStream
没有任何数据且没有关闭,你就不会得到-1但是0。
这会将您的方法发送到无限循环中。
因此,为了阅读本地流,最好检查read() <= 0
,因为您通常可以足够快地获取数据。
最好的方法是通过关闭来确保有eof
流。