首页 > 代码库 > Java_NIO基础分析-1
Java_NIO基础分析-1
1.在java_nio中,channel和buffer是非常关键的概念,先来看看channel&buffer在类的体系结构中的位置和主要属性和方法
在下面完成的文件拷贝过程,会发现所有的数据都是先进入到buffer中,之后channel会按照业务逻辑对buffer进行操作。
import java.io.*;import java.nio.*;import java.nio.channels.*;public class CopyFile { public static void main(String args[]) throws Exception { if (args.length < 2) { System.err.println("Usage: java CopyFile infile outfile"); System.exit(1); } String infile = args[0]; String outfile = args[1]; //得到输入流和输出流 FileInputStream fin = new FileInputStream(infile); FileOutputStream fout = new FileOutputStream(outfile); //得到输入channel和输出channel FileChannel fcin = fin.getChannel(); FileChannel fcout = fout.getChannel(); //new一个ByteBuffer对象 //Buffer对象有四个非常重要的数据position,limit,capacity,mark,他们共同完成了复杂的内部读写的转换,重置等操作,设计的非常精妙。 ByteBuffer buffer = ByteBuffer.allocate(1024); while (true) { //开始读之前先调用clear,设置position = 0;limit = capacity;mark = -1; buffer.clear(); //从输入channel读取数据到buffer中 int r = fcin.read(buffer); //读到-1表示读文件结束了。 if (r == -1) { break; } //从读模式转换到写模式中,设置limit = position;position = 0;mark = -1; buffer.flip(); //把buffer中的内容写入到输出channel中 fcout.write(buffer); } }}
通过图和代码例子可以对NIO中的channel,buffer有一个基本的了解!
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。