NIO的效率要高于标准IO,由于NIO将最耗时的IO操做(填充和提取缓冲区)转移会操做系统。NIO以块为单位传输数据,相比标准IO的以字节为单位效率要高不少。spa
通道和缓冲时NIO的核心对象,每一个NIO操做都要使用到它们。操作系统
通道是对流的模拟,但与流不一样,通道的传输是双向的,一个通道能够同时用于读和写。code
缓冲区是一个容器,它包含将要写入或者刚读出的数据。使用通道进行读写时都要通过缓冲区。对象
使用NIO写入文件,能够经过文件流获取通道blog
FileOutputStream outputStream=new FileOutputStream(new File("/root/Desktop/test.txt")); FileChannel fileChannel=outputStream.getChannel();
下一步是建立缓冲区:ip
CharBuffer charBuffer=CharBuffer.allocate(1024); //往缓冲区存放数据 charBuffer.put("hello world"); //重设缓冲区 charBuffer.flip();
使用通道将缓冲区的内容写入文件,通道只能操做byteBuffer,因此须要使用Charset将CharBuffer转为ByteBufferget
Charset charset=Charset.defaultCharset(); ByteBuffer byteBuffer=charset.encode(charBuffer); //不能肯定channel.write()能一次性写入buffer的全部数据 //因此经过判断是否有余留循环写入 while(byteBuffer.hasRemaining()){ fileChannel.write(byteBuffer); } fileChannel.close(); outputStream.close();