1

(サイズがわずか 54 KB のファイル)のjava.nio.MappedByteBuffer周りを作成しました。java.io.RandomAccessFile結果MappedByteBufferの「容量」と「制限」は約 12 KB であるため、呼び出そうとすると、mybytebuffer.get(i > 13044)または.mybytebuffer.put(i > 13044, value)InvalidIndexException

この動作はすべて、Sun の公式 javadoc に記載されています。私の質問はjava.nio ByteBuffers、ファイル内の任意の場所で読み取りまたは書き込みを行う方法です (ランダムアクセスが必要です)。非順次アクセスを説明する Java NIO の例やドキュメントが見つからないようです。

4

2 に答える 2

1

MappedByteBufferファイルにランダムにアクセスできます...「ダイレクトバイトバッファ」です。(具体的には、OS の仮想メモリ サブシステムを使用して、ファイルをメモリにマップします。)

次のコード スニペットのように、バイトにランダムにアクセスできます。

public void doIt() throws FileNotFoundException, IOException {
    File file = new File("myfile");
    RandomAccessFile raf = new RandomAccessFile(file, "rw");
    FileChannel fc = raf.getChannel();      
    MappedByteBuffer mbb = fc.map(MapMode.READ_WRITE, 0, file.length());

    //get a random byte
    byte b1 = mbb.get(SOME_RANDOM_BYTE); 

    //get another random byte
    mbb.position(SOME_OTHER_BYTE_POSITION);
    byte b2 = mbb.get();
}

必要に応じて、MBB を移動し、バイト (読み取りと書き込みの両方) にアクセスできます。

于 2010-01-09T13:09:47.800 に答える
-1

MappedByteBuffers 自体はランダム アクセスを提供しません。これは誤解です。ランダム アクセスには SeekableByteChannel を使用します。

于 2010-01-09T01:53:27.297 に答える