ByteBuffer

FileChannel in=new FileInputStream("D:\\abr.txt").getChannel();
		File file=new File("D:\\abc.txt");
		if (!file.exists()){
			file.createNewFile();
		}
		ByteBuffer byteBuffer=ByteBuffer.allocate(1024);
		FileChannel out=new FileOutputStream("D:\\abc.txt").getChannel();
		while (in.read(byteBuffer)!=-1){
			byteBuffer.flip();//prepare for writing
			out.write(byteBuffer);
			byteBuffer.clear();//prepare for reading
		}
		in.close();
		out.close();

1.对于任何的基类流,getChannel()会产生一个FileChannel。通道是一种很基础的东西,可以向它传送用于读写的ByteBuffer,并且可以锁定文件的某些区域用于独占式的访问

2.字节存放于ByteBuffer的方法之一是:使用一种“put”方法直接对他们填充,填入一个或多个字节或基本数据类型。也可以使用warp()方法将已存在的字节数组包装放入ByteBuffer中。一旦如此,就不在复制低层的数组,而是把它作为所产生的ByteBuffer存储器,称之为数组支持的ByteBuffer

3.对于只读访问,我们必须显式的使用静态的allocate()方法来分配ByteBuffer。nio的目标就是快速移动大量的数据。也可以调用allocateDirect(),产生一个和操作系统有更高耦合度的“直接”缓存器

4.一旦调用read来告知FileChannel向ByteBuffer存储字节,就必须调用flip方法,让其做好别人读取字节的准备。如果我们打算使用缓存器执行进一步的read操作,我们也必须调用clear方法来为每个read做准备

5.每次read操作后,将会把数据写入缓存器,flip()则是准备缓存器以便它的信息可以由write()提取,write()操作后,信息依旧停留在缓存器,需要使用clear()方法对所有的内布指针重新安排,以便缓存器在另外read()中接受数据。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值