原文地址;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. Nginx学习回顾总结 部分:

    21:46 2015/11/9Nginx学习回顾总结进程间通信,近似于socket通信的的东西:才发现这种通信并不是很难,并不是我想象的那样很多内容,新领域,入门只是几个函数的使用而已.以前猜过是这样 ...

  2. Code[VS]1021 玛丽卡题解

    Code[VS]1021 玛丽卡题解 SPFA Algorithm 题目传送门:http://codevs.cn/problem/1021/ 题目描述 Description 麦克找了个新女朋友,玛丽 ...

  3. 'Could not load NIB in bundle: 'NSBundle xxx/storeFlix.app> ' with name 'UIViewController-w6Q-ra-j06' and directory 'StoreFlixIpad.storyboardc

    1.此代码是从 git clone xxx 下载的. 2.使用 sourcetree 下载即可解决此问题.

  4. java分享第二天(变量及命名规范)

    1 JAVA是一种强类型语言,每个变量都必须声明其类型 2 Java变量是程序中最基本的存储单元,其主要包括变量名,变量类型和作用域 3 声明变量可以一行声明多个 4局部变量:方法或语句块内部定义的变 ...

  5. Hibernate前置和后置方法

    public class Test01 { private ServiceRegistry sr =null; private Session se =null; private Transactio ...

  6. Android使用Fragment定义弹出数字键盘

    fragment主布局文件 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmln ...

  7. Javascript 编程小技巧总结(部分内容借鉴他人)

    1 – 使用===,而不是== ==(或!=)操作符在需要的时候会自动执行类型转换.===(或!==)操作不会执行任何转换.它将比较值和类型,而且在速度上也被认为优于==. 2 – 使用闭包实现私有变 ...

  8. Jquery中animate可以操作css样式属性总结

    可以用 animate() 方法来操作所有 CSS 属性吗? 是的,几乎可以!不过,需要记住一件重要的事情:当使用 animate()时, 必须使用 Camel 标记法书写所有的属性名,比如,必须使用 ...

  9. JS的Touch事件们,触屏时的js事件

    丫的,终于找到了JS在平板电脑上的事件!!!   iphone.ipod Touch.ipad触屏时的js事件   1.Touch事件简介   pc上的web页面鼠标会产生onmousedown.on ...

  10. heroku空间部署步骤

    一,下载安装heroku toolbelt 二,在dos窗口运行 heroku login 进行身份验证 三,heroku create appName --buildpack heroku/php ...