零拷贝是指:从操作系统的角度来看,文件的传输不存在CPU的拷贝,只存在DMA拷贝。在Java程序中,常用的零拷贝有 mmap(内存映射)和 sendFile。零拷贝不仅仅带来更少的数据复制,还能减少线程的上下文切换,减少CPU缓存伪共享以及无CPU校验和计算。

    如果使用传统的IO来进行网络通信,想把本地文件的内容通过网络发送出去,如下所示:

    1. File file = new File("test.txt");
    2. RandomAccessFile raf = new RandomAccessFile(file, "rw");
    3. byte[] arr = new byte[(int) file.length()];
    4. raf.read(arr);
    5. Socket socket = new ServerSocket(8080).accept();
    6. socket.getOutputStream().write(arr);