为什么Hadoop API FSDataInputStream的读取小于缓冲区大小?

1 java hadoop

我有一个想要阅读的hadoop分布式文件系统的二进制文件.我正在使用FSDataInputStream(它扩展了DataInputStream).我有长度为"len"的缓冲区.我使用readBytes = stream.read(buffer)方法从文件中读取"len"字节数到缓冲区.但实际读取的字节数(readBytes)小于缓冲区大小(len),即使我知道文件中存在"len"个字节数.那么为什么FSDataInputStream读取的字节数少于我要求它读取的数量?任何的想法?

mat*_*t b 5

用于DataInputStream.read(byte[]) and InputStream(byte[])状态的JavaDocs 很清楚,该方法将读取"一些字节数",直到字节数组的长度.在填充字节数组之前,代码可能返回的原因有几个.

您不应该只调用read(byte[])一次方法来消耗流中的字节 - 您需要循环并继续从流中读取,直到它返回-1.