NIO学习笔记2

4 篇文章 0 订阅
2 篇文章 0 订阅

分散读取与聚集写入

分散读取(scattering Reads)

将通道中的数据分散到多个缓冲区中
分散读取

聚集写入(gathering Writes)

将多个缓冲区的数据聚集到通道中
聚集写入
一个Channel可以同时支持多个Buffer有序传输(例如文件分段读取一个大文件)

代码示例:
public static void main(String[] args) throws IOException {
		//随机访问
		RandomAccessFile raf= new RandomAccessFile("test.txt", "rw");

		//获取通道
		FileChannel channel = raf.getChannel();
		//分配指定大小指定缓冲区
		ByteBuffer buf1=ByteBuffer.allocateDirect(100);
		ByteBuffer buf2=ByteBuffer.allocateDirect(1024);
		// 分散读取
		ByteBuffer[] bufs={buf1,buf2};
		channel.read(bufs);
		for (ByteBuffer byteBuffer : bufs) {
			// 切换成读模式
			byteBuffer.flip();
		}
		System.out.println(new String(bufs[0].array(),0,bufs[0].limit()));
		System.out.println("****************分散读取**************");
		System.out.println(new String(bufs[1].array(),0,bufs[1].limit()));
		System.out.println("------聚集写入---------");
		RandomAccessFile raf2= new RandomAccessFile("test2.txt", "rw");
		//获取通道
		FileChannel channel2 = raf2.getChannel();
		channel2.write(bufs);
		raf2.close();
		raf.close();
		
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值