Java InputStream被阻止
我的输入流有点问题 代码如下:Java InputStream被阻止,java,inputstream,Java,Inputstream,我的输入流有点问题 代码如下: public byte[] getBytes(InputStream in) throws IOException { ByteArrayOutputStream out = new ByteArrayOutputStream(); int read = 0; byte[] buffer = new byte[1024]; while ( 0 < (read = in.read(buffer)
public byte[] getBytes(InputStream in) throws IOException {
ByteArrayOutputStream out = new ByteArrayOutputStream();
int read = 0;
byte[] buffer = new byte[1024];
while ( 0 < (read = in.read(buffer))) {
Log.v(TAG,"buffering...");
out.write(buffer,0,read);
Log.v(TAG, "bufffered data size : "+out.size());
}
Log.v(TAG, "close out");
out.close();
Log.v(TAG, "getBytes finish");
return out.toByteArray();
}
在我的时间结束时,它工作了
谢谢你们的帮助,伙计们 那么,in.read(buffer)
将一直阻塞,直到它接收到数据、到达文件末尾或抛出异常(从)。我的猜测是,它仍然在等待来自InputStream的更多输入
此外,您应该在完成读取后关闭输入流。
读取
可以阻止,直到输入可用。您在中作为输入流传递的是什么?如果它是一个套接字,它可能只是在等待更多的数据到达@JimGarrison我通过蓝牙传递一个字节数组。@Aayus我看了这个,然后又回来了。我怎么知道读取是否完成了?我在日志中看到了它,但我以前不知道数据的大小。我传输位图,因此大小不同。我尝试添加if(is.available()>0)break;但它在结束之前打破了循环。很多时候文件包含一些描述文件大小的元数据。。。您还可以继续读取字节并将它们存储在某种动态大小的数据结构中,如ArrayList。
if(is.available()==0){
Log.v(TAG, "time to sleep");
Thread.sleep(200);
if(is.available()==0)
break;
}