package com.hao.demo.netty.nio;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
/**
* @author haoxiansheng
* @date 2020-05-12
* 可以让文件 在内存(堆外内存)修改,操作系统不需要拷贝一次
*/
public class MappedByteBufferTest {
public static void main(String[] args) throws IOException {
String path = "1.text";
RandomAccessFile randomAccessFile = new RandomAccessFile(path, "rw");
// 获取对应的通道
FileChannel fileChannel = randomAccessFile.getChannel();
/**
* 参数说明
* 1、FileChannel.MapMode.READ_WRITE 使用读写模式
* 2、可以直接修改的起始位置
* 3、是映射到内存的大小,即将path 文件的多少个字节映射到内存
* 可以修改的范围 0-5
*/
MappedByteBuffer mappedByteBuffer = fileChannel.map(FileChannel.MapMode.READ_WRITE, 0, 5);
mappedByteBuffer.put(0, (byte)'H'); // 实际类型是第一个实现类DirectBuffer
mappedByteBuffer.put(3,(byte)9);
mappedByteBuffer.put(5,(byte)'Y'); // 下标越界
fileChannel.close();
randomAccessFile.close();
}
}