2

Javaでメモリマップファイルについて学んでいます。MappedByteBuffer への書き込み/読み取り方法を知りたいです。

MappedByteBuffer への書き込みに使用しているコードは次のとおりです。

private static void write(String strFilePath) {

        File fl = new File(strFilePath);
        FileChannel fChannel = null;
        RandomAccessFile rf = null;
        MappedByteBuffer mBBuffer = null;
        try {

            rf = new RandomAccessFile(fl, "rw");
            fChannel = rf.getChannel();

            mBBuffer = fChannel.map(FileChannel.MapMode.READ_WRITE, 0, 1024  );

            for(int i =0;i<10030;i++) {

                if(i == mBBuffer.limit()) {
                    mBBuffer = fChannel.map(FileChannel.MapMode.READ_WRITE,i+1,1024);
                }
                mBBuffer.put((byte)'a');
            }

        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            try {
                if(fChannel != null) {
                    fChannel.close();
                }
                if(rf != null) {
                    rf.close();
                }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }
    }

実行しようとすると、BufferOverflow Exception が発生します。

ファイルに書き込む内容のサイズが事前にわからない場合、書き込み中に制限に達した後に MappedByteBuffer のサイズを増やすにはどうすればよいですか?

読み取りのために、この場合を考えてみましょう。初期バッファー サイズで MappedByteBuffer を作成し、その初期サイズの最後に達した場合、ファイルの別の部分をどのようにマップしますか?

より一般的には、ファイルのある部分から別の部分へのバイトオフセットを持つファイルがあります。ポイント(x)でオフセット(y)を読み取ると、(x)から(y)にジャンプしたいと思います。どうすればいいのですか?

助けてくれてありがとう。

4

0 に答える 0