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有一个基本的了解!

 

posted @ 2014-06-27 14:54  左右斋  阅读(220)  评论(0编辑  收藏  举报