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

时间:2012-08-29 19:13:55

标签: java hadoop

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

1 个答案:

答案 0 :(得分:5)

DataInputStream.read(byte[]) and InputStream(byte[])的JavaDocs非常清楚地表明该方法将读取字节数组长度的“一定数量的字节”。在填充字节数组之前,代码可能返回的原因有几个。

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