Hadoop 分散ファイル システム上に読みたいバイナリ ファイルがあります。私は FSDataInputStream ( DataInputStream を拡張する) を使用しています。長さ "len" のバッファがあります。readBytes = stream.read(buffer) メソッドを使用して、ファイルから "len" バイト数をバッファーに読み込みます。しかし、実際に読み取られたバイト数 ( readBytes ) は、ファイルに "len" 個のバイトが存在することがわかっているにもかかわらず、バッファー サイズ ( len ) よりも小さくなっています。FSDataInputStream が読み取るバイト数が、私が要求したバイト数よりも少ないのはなぜですか? 何か案が?
2130 次
2 に答える
5
JavaDocs forDataInputStream.read(byte[]) and InputStream(byte[])
は、メソッドがバイト配列の長さまで「数バイト」を読み取ることを非常に明確に示しています。バイト配列がいっぱいになる前にコードが返される理由はいくつかあります。
ストリームからバイトを消費するためにメソッドを1回だけ呼び出すべきではありません。read(byte[])
ループして、ストリームが返されるまでストリームからの読み取りを続ける必要があります-1
。
于 2012-08-29T19:16:58.533 に答える