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;
}