MappedByteBuffer
来处理文件映射,使用MappedByteBuffer
向网络中发送数据的过程如下:
- 使用MappedByteBuffer建立文件映射,用户空间可以通过虚拟地址直接访问映射的文件数据;
- 将映射的文件数据拷贝到socket网络缓冲区(CPU复制);
- DMA将socket缓冲区的数据拷贝到网卡(DMA复制);

文章插图
MappedByteBuffer减少了从内核缓冲区到用户缓冲区的数据拷贝,可以直接将内核缓冲区的数据拷贝到网络缓冲区 。
FileChannelJava NIO中的FileChannel可以实现将数据从FileChannel直接传输到另一个Channel,它是sendfile的一种实现:
RandomAccessFile file = new RandomAccessFile(new File("/Users/sml/test.txt"), "r");// 获取FileChannelFileChannel fileChannel = file.getChannel();long size = fileChannel.size();SocketChannel socketChannel = SocketChannel.open(new InetSocketAddress("localhost", 8080));fileChannel.transferTo(0,size,socketChannel);
参考【极客时间-倪朋飞】Linux性能优化实战
【极客时间-刘超】趣谈Linux操作系统
【拉勾教育-若地】Netty 核心原理剖析与 RPC 实践
【 Kirito的技术分享】文件IO操作的最佳实践
【小码农叔叔】java使用nio读写文件
【占小狼】深入浅出MappedByteBuffer
【零壹技术栈】深入剖析Linux IO原理和几种零拷贝机制的实现
【tomas家的小拨浪鼓】堆外内存 之 DirectByteBuffer 详解
网络IO和磁盘IO详解
经验总结扩展阅读
- 2023年2月9日是安装门框吉日吗 2023年2月9日是安装门框的黄道吉日吗
- 猪肉沫一块是什么梗
- 2023年2月9日是堵蚂蚁洞吉日吗 2023年2月9日堵蚂蚁洞行吗
- 我去厨房给你拿钱是什么意思梗
- 百货批发部从哪里进货渠道
- 猪屎入鸡窝是什么梗
- 原神沙海迷踪火把机关怎么解密
- 秋分和立秋哪个是秋天的开始
- 2023年2月9日航行好不好 2023年农历正月十九航行吉日
- 支付宝蚂蚁庄园10月12日答案是什么