0
 file = new RandomAccessFile("xanadu.txt", "rw");
        FileChannel channel = file.getChannel();
        ByteBuffer buffer = ByteBuffer.allocate(48);
        int byteReads = channel.read(buffer);

だから私はバッファの容量として48を割り当てています。ここで、私が読んでいるtxtファイルが約10MBであると考えてください。したがって、論理的には、バッファー割り当てサイズを超えています。しかし、読み込もうとすると、サイズに関係なく、ファイルのすべての内容を読み取ることができます。だから、これがどのように可能であるか。

私はこのストリーミング分野に不慣れなので、私の質問は非常に基本的なように思われるかもしれません。

4

1 に答える 1

2

呼び出しはread単に48バイトを超えて読み取ることはありません。

オーバーフローするものはありreadません。期待するすべてのデータを読み取るまで、繰り返し呼び出す必要があります。

これは、ReadableByteChannelインターフェースのドキュメントに記載されています。

このチャネルから指定されたバッファに一連のバイトを読み取ります。

チャネルから最大rバイトを読み取ろうとします。ここで、rは、このメソッドが呼び出された時点で、バッファーに残っているバイト数、つまりdst.remaining()です。

clear()コンテンツを処理した後、に戻す前にバッファリングする必要がありますread

于 2012-04-29T14:58:06.510 に答える