具体思路:打开一个文件,把文件以字节读到buffer中,再把buffer进行一次flip,就可以把buffer写入到一个文件中了。如果没有clear方法会产生死循环,一直把buffer读到文件中。
不写clear方法分析:第一次read之后position等于limit,read等于buffer字节数,flip之后,position为0,limit不变,把buffer读进文件中,position等于limit。再次循环,因为position等于limit,所以读取数量为0,所以read等于0,循环不跳出,flip之后,position为0,再次把buffer读进文件。read一直为0,循环不退出
package com.wave.NioTest;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
public class NioTest {
public static void main(String[] args) throws Exception{
FileInputStream fileInputStream = new FileInputStream("input.txt");
FileOutputStream fileOutputStream = new FileOutputStream("output.txt");
FileChannel inputChannel = fileInputStream.getChannel();
FileChannel outputChannel = fileOutputStream.getChannel();
ByteBuffer byteBuffer = ByteBuffer.allocate(1024);
while(true){
byteBuffer.clear();
int read = inputChannel.read(byteBuffer);
if(read == -1){
break;
}
byteBuffer.flip();
outputChannel.write(byteBuffer);
}
inputChannel.close();
outputChannel.close();
}
}