原文地址;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中。

     RandomAccessFile aFile = new RandomAccessFile("data/nio-data.txt", "rw");
FileChannel inChannel = aFile.getChannel(); ByteBuffer buf = ByteBuffer.allocate(48); int bytesRead = inChannel.read(buf);
while (bytesRead != -1) { System.out.println("Read " + bytesRead);
buf.flip(); while(buf.hasRemaining()){
System.out.print((char) buf.get());
} buf.clear();
bytesRead = inChannel.read(buf);
}
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. jquery 操作iframe的几种方法总结

    iframe在复合文档中经常用到,利用jquery操作iframe可以大幅提高效率,这里收集一些基本操作 DOM方法: 父窗口操作IFRAME:window.frames["iframeSo ...

  2. 5分钟windows wamp php安装phpunit 2015最新安装实践

    16:11 2015/11/235分钟windows wamp php安装phpunit 2015最新安装实践我花了一个下午和一个上午的时间注意:步骤中添加环境变量多的时候要保存很多步,知道窗口都自动 ...

  3. JavaScript进阶篇

    组团,并给团取个名(如何创建数组) 使用数组之前首先要创建,而且需要把数组本身赋至一个变量.好比我们出游,要组团,并给团定个名字“云南之旅”. 创建数组语法: var myarray=new Arra ...

  4. hdu1232 并查集

    1. hdu1232 2.链接:http://acm.hdu.edu.cn/showproblem.php?pid=1232 3.总结:简单并查集 #include<iostream> # ...

  5. android-发送短信

  6. 建立和断开与MySQL服务器的连接

    MySQL 与 mysql 之间的区别: MySQL指完整的MySQL DBMS系统,mysql仅代表一个特定的客户程序. 连接服务器: >mysql -h host_name -p -u us ...

  7. HTTPS协议简介

    一.HTTPS简介 百度已经于近日上线了全站 HTTPS 的安全搜索,默认会将 HTTP 请求跳转成 HTTPS.本文重点介绍 HTTPS 协议, 并简单介绍部署全站 HTTPS 的意义. HTTPS ...

  8. css中的一些兼容问题

    浏览器兼容 为什么会有兼容问题? 由于市场上浏览器种类众多,而不同浏览器其内核亦不尽相同,所以各个浏览器对网页的解析就有一定出入,这也是导致浏览器兼容问题出现的主要原因,我们的网页需要在主流浏览器上正 ...

  9. java类集框架图(google找的,备个份)

  10. 图解Java内存回收机制

    在Java中,它的内存管理包括两方面:内存分配(创建Java对象的时候)和内存回收,这两方面工作都是由JVM自动完成的,降低了Java程序员的学习难度,避免了像C/C++直接操作内存的危险.但是,也正 ...