nio主要有channel、buffer、selector组成,java nio中文件系统是阻塞的,不会用到selsector。
buffer读和写的暂存容器和channel配合使用,四个属性mark,position,limit,capacity。方法包括filp()、clear()、
channel是client与io设备之间读写的交通通道,数据xianfangdaobuffer,再经过channerl写入设备,或者channerl里面读取数据
selecrort提供时间通知机制
下面是代码,将一个大文件通过nio分成多个小文件(中文会出现乱码,用的是字节流)
import java.io.*;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
/**
* Created by doshest on 2016/10/11.
*/
public class NioTest {
public static void main(String args[])throws IOException{
FileInputStream fis = new FileInputStream("D:\\IdeaProjects\\javaproject\\src\\catalina.out");
FileChannel fc=fis.getChannel();
ByteBuffer buffer= ByteBuffer.allocate(1024*1024*1);
int j=0;
while(true){
buffer.clear();
int flag=fc.read(buffer);
System.out.println(flag);
if(flag==-1){
break;
}
buffer.flip();
OutputStream os;
FileOutputStream fos=new FileOutputStream((j++)+".out");
FileChannel fcout= fos.getChannel();
fcout.write(buffer);
}
}
}