1

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

4

2 回答 2

5

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

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

于 2012-08-29T19:16:58.533 回答
0

如果您位于文件块的末尾附近,使得从该位置向前的“len”字节位于下一个块中的某个位置,那么当您使用 stream.read(buffer) 时,您将只获得块中剩余的字节. 在随后的读取中,您将开始从文件的下一个块中获取字节。

于 2017-11-28T21:50:49.410 回答