package com.itjob.javaadvanced;

import java.io.FileInputStream;   
import java.io.FileOutputStream;   
import java.nio.ByteBuffer;   
import java.nio.channels.FileChannel;   

/**
 * 第三章考题：java.io包中Buffer和Channel相关类的使用
 * @author AmigoXie
 */
public class NioBufferChannelTest {   
    public static void main(String[] args) throws Exception {   
        String infile = "D:\\infile.text";   
        String outfile = "D:\\outfile.txt";   
        // 获取源文件和目标文件的输入输出流   
        FileInputStream fin = new FileInputStream(infile);   
        FileOutputStream fout = new FileOutputStream(outfile);   
        // 获取输入输出通道   
        FileChannel fcin = fin.getChannel();   
        FileChannel fcout = fout.getChannel();   
        // 创建缓冲区   
        ByteBuffer buffer = ByteBuffer.allocate(1024);   
        while (true) {   
            // clear方法重设缓冲区，使它可以接受读入的数据   
            buffer.clear();   
            // 从输入通道中将数据读到缓冲区   
            int re = fcin.read(buffer);   
            // read方法返回读取的字节数，可能为零，如果该通道已到达流的末尾，则返回-1   
            if (re == -1) {   
                break;   
            }   
            // flip方法让缓冲区可以将新读入的数据写入另一个通道   
            buffer.flip();   
            // 从输出通道中将数据写入缓冲区   
            fcout.write(buffer);   
        }
        // 关闭资源
        fcin.close();
        fout.close();
    }   
}  
