0

10MB のバイナリ ファイルがあります。異なるサイズ (300、273 バイトなど) のチャンクで読み取る必要があります。読むために私はFileChannelとを使いますByteBuffer。現在、読み取りの反復ごとに、ByteBuffer読み取る必要がある新しいサイズを割り当てています。

ByteBuffer に 1 回だけ (たとえば 200 KB) 割り当てて、それに読み込むことは可能ですか (300、273 バイトなど)? 一度に 200KB 以上を読み取ることはありません。ファイル全体を読み取る必要があります。

UPD

public void readFile (FileChannel fc, int amountOfBytesToRead)
{
    ByteBuffer bb= ByteBuffer.allocate(amountOfBytesToRead);
    fc.read(bb);
    bb.flip();
    // do something with bytes
    bb = null;
}

メモリの制約により、ファイル全体を一度に読み取ることができません。そのため、チャンクで読み取りを実行します。効率も非常に重要です (そのため、複数の割り当てで現在のアプローチを使用したくありません)。ありがとう

4

1 に答える 1

2

ByteBuffers必要なサイズをいくつか宣言し、 scatter-read: を使用しますread(ByteBuffer[] dsts, ...)

または、NIO を忘れて使用しますDataInputStream,readFully()。下にを配置してBufferedInputStreamも、パフォーマンスが低下することはありません。さらに高速になる可能性があります。

于 2014-12-11T21:26:55.570 に答える