原文地址;http://tutorials.jenkov.com/java-nio/channels.html

JAVA NIO channels和流的概念很像,下面是他们的一些区别:

  • 你可以对channel进行读写,流只能一种操作(读或写)。
  • channel可以异步的读写。
  • channel总是读入、写出到buffer。

根据上面提到的,你可以从channel中读取数据到buffer中,也可以从buffer中写入数据到channel中。下即可解释:

JAVA NIO: channels读入数据到buffers,buffers写入数据到channels

Channel 实现

下面是JAVA NIO 中最重要的channel的实现。

  • FileChannel
  • DatagramChannel
  • SocketChannel
  • ServerSocketChannel

FileChannel从文件中读写数据。

DatagramChannel通过UDP读写数据。

SocketChannel通过TCP读写数据。

ServerSocketChannel像一个web server那样,允许你监听TCP连接。每一个连接都会产生一个SocketChannel。

一个简单的Channel的例子:

下面是一个简单的使用FileChannel的例子,读取一些数据到Buffer中。

  1. RandomAccessFile aFile = new RandomAccessFile("data/nio-data.txt", "rw");
  2. FileChannel inChannel = aFile.getChannel();
  3.  
  4. ByteBuffer buf = ByteBuffer.allocate(48);
  5.  
  6. int bytesRead = inChannel.read(buf);
  7. while (bytesRead != -1) {
  8.  
  9. 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();

注意flip()方法的调用,开始你读取数据到buffer,然后转换,即由读转换到写,然后从buffer中读取数据。这个问题将会在下一节的Buffer中详细的介绍。

[翻译] java NIO Channel的更多相关文章

  1. Java NIO Channel和Buffer

    Java NIO Channel和Buffer @author ixenos Channel和Buffer的关系 1.NIO速度的提高来自于所使用的结构更接近于OS执行I/O的方式:通道和缓冲器: 2 ...

  2. Java NIO Channel之FileChannel [ 转载 ]

    Java NIO Channel之FileChannel [ 转载 ] @author zachary.guo 对于文件 I/O,最强大之处在于异步 I/O(asynchronous I/O),它允许 ...

  3. Java NIO Channel通道

    原文链接:http://tutorials.jenkov.com/java-nio/channels.html Java NIO Channel通道和流非常相似,主要有以下几点区别: 通道可以读也可以 ...

  4. (三:NIO系列) Java NIO Channel

    出处: Java NIO Channel 1.1. Java NIO Channel的特点 和老的OIO相比,通道和NIO流(非阻塞IO)主要有以下几点区别: (1)OIO流一般来说是单向的(只能读或 ...

  5. [翻译] java NIO Buffer

    原文地址:http://tutorials.jenkov.com/java-nio/buffers.html JAVA NIO 是在和channel交互的时候使用的.正如你所知道的,数据是从chann ...

  6. [翻译] java NIO 教程---介绍

    原文地址:http://tutorials.jenkov.com/java-nio/index.html Java NIO(new IO)是从java1.4之后的对IO API的另一种选择,即对标准j ...

  7. Java NIO Channel to Channel Transfers通道传输接口

    原文链接:http://tutorials.jenkov.com/java-nio/channel-to-channel-transfers.html 在Java NIO中如果一个channel是Fi ...

  8. Java NIO Channel to Channel Transfers

    In Java NIO you can transfer data directly from one channel to another, if one of the channels is a ...

  9. Java NIO Channel 使用

    Java NIO 中的 Channel 分类: FileChannel SocketChannel ServerSocketChannel DatagramChannel channel 分类 Fil ...

随机推荐

  1. springmvc入门基础之注解和参数传递

    一.SpringMVC注解入门 1. 创建web项目2. 在springmvc的配置文件中指定注解驱动,配置扫描器 <!-- mvc的注解驱动 --> <mvc:annotation ...

  2. java使用poi读取ppt文件和poi读取excel、word示例

    java使用poi读取ppt文件和poi读取excel.word示例 http://www.jb51.net/article/48092.htm

  3. 使用shell操作mysql(转)

    在linux平台下,为避免每次操作数据库(mysql)都要进入Mysql命令模式下,可以使用Shell命令直接操作数据库. 一.直接写sql语句 if [ $# -ne 1 ] then        ...

  4. Hive_初步见解,安装部署与测试

    一.hive是什么东东 1. 个人理解 hive就是一个基于hdfs运行于MapReduce上的一个java项目, 这个项目封装了jdbc,根据hdfs编写了处理数据库的DDL/DML,自带的 二进制 ...

  5. HTML 表单和验证事件

    1.表单验证<form></form> (1)非空验证(去空格) (2)对比验证(跟一个值对比) (3)范围验证(根据一个范围进行判断) (4)固定格式验证:电话号码,身份证号 ...

  6. zju(1)嵌入式开发环境构建

    1. 实验目的 搭建嵌入式开发环境,安装ubntu,编译交叉工具链,安装配置tftp,nfs.用makefile 编译几个文件,在实验台上运行. 2. 实验内容 1) 安装ubuntu12.04 2) ...

  7. java 中的2个接口 Comparable和Comparator

    像Integer.String这些类型的数据都是已经实现Comparable接口的,所以对这些类型可以直接通过Arrays.sort(...)和Collections.sort(...)方法进行排序. ...

  8. free一个无效指针

    1. 错误描述:   刚才写了一个删除单链表的结点函数, 参数是 指向链表的指针和链表中指定删除的结点的指针.  当我free这个待删除的结点, 结果报错. 2. 为什么会报错? 我查了查MSDN, ...

  9. gif 图片制作和拆解

    http://app.baidu.com/app/enter?appid=120980 gif 制作http://app.baidu.com/app/enter?appid=143534 gif 分解

  10. ListView的深入学习

    ListView通常有两个职责: 将数据填充到布局 : 处理用户的点击选择操作 二.创建ListView需要3个元素 ListView的每一列的View View的数据或者图片 连接数据与ListVi ...