ray*_*zag 2 java nio memory-mapped-files
我了解如何创建内存映射文件,但我的问题是在下面一行中说:
FileChannel roChannel = new RandomAccessFile(file, "r").getChannel();
ByteBuffer roBuf = roChannel.map(FileChannel.MapMode.READ_ONLY, 0, SIZE);
Run Code Online (Sandbox Code Playgroud)
例如,在我将SIZE设置为2MB的情况下,这是否意味着它将仅加载2MB的文件,或者它将在文件中进一步读取并更新缓冲区,因为我从中消耗了字节?
例如,在我将SIZE设置为2MB的情况下,这是否意味着它将仅加载2MB的文件,或者它将在文件中进一步读取并更新缓冲区,因为我从中消耗了字节?
它将仅加载缓冲区初始化中指定的文件部分。如果您希望它进一步读取,则需要进行某种读取循环。尽管我不会说这很棘手,但是如果不是100%熟悉所涉及的java.io和java.nio API,那么将其填充的机会就很高。(例如:不翻转缓冲区;缓冲区/文件边缘的大小写错误)。
如果您正在寻找一种简单的方法来访问ByteBuffer中的此文件,请考虑使用MappedByteBuffer。
RandomAccessFile raf = new RandomAccessFile(file, "r");
FileChannel fc = raf.getChannel();
MappedByteBuffer buffer = fc.map(FileChannel.MapMode.READ_ONLY, 0, fc.size());
Run Code Online (Sandbox Code Playgroud)
在这种情况下使用MBB的好处是,它不一定会将整个缓冲区实际加载到内存中,而是仅加载您正在访问的部分。
| 归档时间: |
|
| 查看次数: |
7362 次 |
| 最近记录: |