java nio编程学习笔记(2)--channel

来源:互联网 发布:中国石油大学 知乎 编辑:程序博客网 时间:2024/06/06 00:10

Channel与流的区别:

1、Channel和Buffer之间的读写是双向的,流的读写是单向的

2、Channel可以异步读写

3、Channel的数据读写必须依赖于Buffer


这些是Java NIO中最重要的通道的实现:

  • FileChannel
  • DatagramChannel
  • SocketChannel
  • ServerSocketChannel

基本的 Channel 示例

下面是一个使用FileChannel读取数据到Buffer中的示例:

01RandomAccessFile aFile = newRandomAccessFile("data/nio-data.txt""rw");
02FileChannel inChannel = aFile.getChannel();
03 
04ByteBuffer buf = ByteBuffer.allocate(48);
05 
06int bytesRead = inChannel.read(buf);
07while (bytesRead != -1) {
08 
09System.out.println("Read " + bytesRead);
10buf.flip();
11 
12while(buf.hasRemaining()){
13System.out.print((char) buf.get());
14}
15 
16buf.clear();
17bytesRead = inChannel.read(buf);
18}
19aFile.close();

注意 buf.flip() 的调用,首先读取数据到Buffer,然后反转Buffer,接着再从Buffer中读取数据。下一节会深入讲解Buffer的更多细节。





转载自并发编程网 – ifeve.com
0 0
原创粉丝点击