package com.tiger;

import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;

/**
* 内存映射是一种读和写文件数据的方法,它可以比常规基于流或基于通信管道IO快得多,
* 内存映射文件IO是通过使文件中的数据出现为内存数组的内容来完成,这似乎是将整个文件读到内存,但事实并不是这样,
* 一般来说只有文件实际读取或写入的部分才会映射到内存
*
* @description:
* @author: tiger
* @create: 2021-05-02 10:05
*/
public class MappedBufferDemo {

static private final int start = 0;
static private final int size = 10;

public static void main(String[] args) throws IOException {
String outfilepath = "C:/note/Netty/rando.txt";
RandomAccessFile raf = new RandomAccessFile(outfilepath, "rw");
FileChannel fc = raf.getChannel();

// 把缓冲区跟文件系统进行一个映射关系,只要操作缓冲区内容,文件内容也会发生改变
MappedByteBuffer mbb = fc.map(FileChannel.MapMode.READ_WRITE, start, size);

mbb.put(0, (byte) 97);
mbb.put(9, (byte) 122);
raf.close();

}
}