在Java中编写和读取MappedByteBuffer

时间:2016-01-07 08:35:18

标签: java nio memory-mapped-files mappedbytebuffer

我正在学习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异常。

如果我不知道我将提前写入文件的内容大小,如何在写入时达到限制后增加MappedByteBuffer的大小?

为了阅读,让我们来看看这个案子, 我创建了一个具有初始缓冲区大小的MappedByteBuffer,如果到达该初始大小的末尾,我如何映射文件的不同部分

更一般地说,我有一个文件,从文件的一部分到另一部分有字节偏移,当我在点(x)读取偏移量(y)时,我想从(x)跳转到(y) )。我该怎么做?

先谢谢你帮助我。

0 个答案:

没有答案