Java是否InputStream.read(byte [] b,int offset,int length)等待指定的全部字节数

时间:2013-09-03 16:30:47

标签: java android io inputstream

如果我这样做,inStream.read(buffer,0,65); Java会等待所有65个字节,还是会等待一段时间,然后只需填充缓冲区就可以填充多少个字节。

1 个答案:

答案 0 :(得分:0)

InputStream.read(byte[] b, int off, int len)将字节读入给定的byte[],最多为len,并返回实际读取的字节数,如果遇到流末尾,则返回-1 。它必须尝试读取至少一个字节(除非它被阻塞),除非遇到流的末尾,0作为len参数的参数给出,或者抛出异常。

是否在读取len字节之前调用阻塞是一个实现细节,特别是java.io.InputStream中提供的默认实现将阻塞,直到len个字节被读取,结束遇到流,或者抛出异常,但是实现可以立即急切地返回可用字节(只要有至少一个要读取的字节),并且仍然满足方法的契约。

总而言之,您应该始终检查返回值,以查看实际从流中读取的字节数。