零拷贝之MMAP:内存映射 减少cpu拷贝次数 减少时间约为1倍
import java.io.File;
import java.io.RandomAccessFile;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
//零拷贝之MMAP:内存映射 减少cpu拷贝次数 减少时间约为1倍
public static void main(String[] args) throws Exception {
//映射的文件
File file = new File("E:\\mmap");
//映射的FileChannel对象
FileChannel fileChannel = new RandomAccessFile(file,"rw").getChannel();
//FileChannel中定义了一个map()方法,它可以把一个文件从position位置开始的size大小的区域映射为内存映射文件
MappedByteBuffer mmap = fileChannel.map(FileChannel.MapMode.READ_WRITE, 0, 1024);
//写入数据
mmap.put("mmap".getBytes());
//刷新写入磁盘
mmap.flip();
//读取数据
byte[] b = new byte[4];
mmap.get(b, 0, 4);
System.out.println(new String(b));
//解除mmap (win需要解除)
//mmap.clear();//方法1.将此缓冲区重置为初始容量,但是并不移除映射
fileChannel.close(); // 解除映射 - 方法2: 关闭FileChannel,它会解除映射
// 关闭RandomAccessFile
fileChannel.close();
}