重點:
1、0拷貝需要系統支持。
普通內存模型:
java線程內存 --> 操作系統內存 --> 硬盤

直接內存模型:
java --> 操作系統內存 --> 硬盤

兩者對比,少了一步:直接內存直接操作系統內存,少了java線程內存到操作系統內存拷貝的這一步,所以提升了效率。
代碼:
java.nio.channels.FileChannel#transferTo
示例:
channel.transferTo(0,channel.size(),OutputChannel);
內存映射文件:
MappedByteBuffer:將文件映射到內核中(原有方式,必須在jvm中,才能操作),可以直接操作。具體的讀寫仍然由系統負責。
使用示例:
File file = new File("hello.txt");
//用隨機文件讀寫的方式打開文件
RandomAccessFile randomAccessFile = new RandomAccessFile(file,"rw");
//打開對應的通道
FileChannel channel = randomAccessFile.getChannel();
//將文件直接映射到程序,映射模式為讀寫
MappedByteBuffer mappedByteBuffer = channel.map(MapMode.READ_WRITE,0,file.length());
//接下來,就可以直接操作buffer了
