public static void main(String[] args) throws IOException { /* 不能直接打开一个FileChannel, 须要经过使用一个InputStream、OutputStream或RandomAccessFile来获取一个FileChannel实例 */ ReadableByteChannel readChannel = new FileInputStream("C:\\Users\\MI\\Desktop\\dev.txt").getChannel(); WritableByteChannel writeChannel = new FileOutputStream("C:\\Users\\MI\\Desktop\\NIOTest.txt", false).getChannel(); ByteBuffer buffer = ByteBuffer.allocate(1024); //没有数据可读入时返回-1 while (-1 != (readChannel.read(buffer))) { /* 每次模式切换前,先调用一下flip()方法就是了 flip() 它经过操做limit和position来保证buffer中的数据被正确读写 clear() 直接将position设为0,在buffer数据没有彻底读写完时会出现数据遗漏 compact() 方法将全部未读的数据拷贝到Buffer起始处 rewind() 将position设置为0 */ //从读切换到了写 buffer.flip(); //将buffer中的数据写入目标Channel writeChannel.write(buffer); //从写切换到读 buffer.flip(); } readChannel.close(); writeChannel.close(); }
参考连接
(NIO教程:https://www.yiibai.com/java_nio)
(NIO教程:http://ifeve.com/java-nio-all/)java
示例中只体现了: Channel 和 Buffer 的概念。还有一个重要概念:Selector。下一学习目标:基于NIO三个重要概念以及网络实现一个聊天室web