Channel与流的区别:
1、Channel和Buffer之间的读写是双向的,流的读写是单向的
2、Channel可以异步读写
3、Channel的数据读写必须依赖于Buffer
这些是Java NIO中最重要的通道的实现:
FileChannelDatagramChannelSocketChannelServerSocketChannel
下面是一个使用FileChannel读取数据到Buffer中的示例:
01 RandomAccessFile aFile = newRandomAccessFile("data/nio-data.txt", "rw"); 02 FileChannel inChannel = aFile.getChannel(); 03 04 ByteBuffer buf = ByteBuffer.allocate(48); 05 06 int bytesRead = inChannel.read(buf); 07 while (bytesRead != -1) { 08 09 System.out.println("Read " + bytesRead); 10 buf.flip(); 11 12 while(buf.hasRemaining()){ 13 System.out.print((char) buf.get()); 14 } 15 16 buf.clear(); 17 bytesRead = inChannel.read(buf); 18 } 19 aFile.close();注意 buf.flip() 的调用,首先读取数据到Buffer,然后反转Buffer,接着再从Buffer中读取数据。下一节会深入讲解Buffer的更多细节。
转载自 并发编程网 – ifeve.com