2019独角兽企业重金招聘Python工程师标准>>>

Java NIO Channel通道和流非常相似,主要有以下几点区别:

  • 通道可以度也可以写,流一般来说是单向的(只能读或者写)。
  • 通达可以异步读写。
  • 通道总是基于缓冲区Buffer来读写。

正如上面提到的,我们可以从通道中读取数据,写入到buffer;也可以中buffer内读数据,写入到通道中。下面有个示意图:

Java NIO: Channels read data into Buffers, and Buffers write data into Channels

Channel的实现(Channel Implementations)

下面列出Java NIO中最重要的集中Channel的实现:

  • FileChannel
  • DatagramChannel
  • SocketChannel
  • ServerSocketChannel

FileChannel用于文件的数据读写。 DatagramChannel用于UDP的数据读写。 SocketChannel用于TCP的数据读写。 ServerSocketChannel允许我们监听TCP链接请求,每个请求会创建会一个SocketChannel.

Channel的基础示例(Basic Channel Example)

这有一个利用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();

注意buf.flip()的调用。首先把数据读取到Buffer中,然后调用flip()方法。接着再把数据读取出来。在后续的章节中我们还会讲解先关知识。

转载于:https://my.oschina.net/gaoguofan/blog/791484

03. Java NIO Channel 通道相关推荐

  1. 二、Java NIO Channel

    一.Java NIO 网络编程 二.Java NIO Channel 三.Java NIO Buffer 四.Java NIO Selector 五.Java NIO 扩展组件 一.Channel 概 ...

  2. 03 Java NIO allocateDirect()和allocate()区别

    03 Java NIO allocateDirect和allocate区别 allocateDirect()和allocate()区别 直接与非直接缓冲区 直接与非直接缓冲区 源码分析 allocat ...

  3. java nio channel原理_Java NIO 选择器(Selector)与通道(Channel) 原理 | 学步园

    NIO底层实现poll, epoll(jdk1.5update 9  和jdk1.6  仅限于 linux 2.6以上 ) Java NIO 选择器(Selector) 知识预备 (linux epo ...

  4. Java NIO之通道

    通道 通道基础 通道打开 通道使用 通道关闭 Scatter/Gather 文件通道 文件通道代码示例 Socket通道 Socket通道代码示例 总结 通道 channel用于字节缓冲区和位于通道另 ...

  5. Java NIO Channel

    Java NIO 通道(Channel) Java NIO的Channel和流(Streams)很相似,但是也有一些区别: Channel是双向的,你可以从Channel中读取,也可以向Channel ...

  6. Java NIO之Channel(通道)

    **Java高级特性增强-NIO 本部分网络上有大量的资源可以参考,在这里做了部分整理并做了部分勘误,感谢前辈的付出,每节文章末尾有引用列表~ 写在所有文字的前面:作者在此特别推荐Google排名第一 ...

  7. 95-50-050-java.nio.channels-NIO-NIO之Channel(通道)

    1.世界 Java NIO之Channel(通道) Buffer(缓冲区)介绍 通常来说NIO中的所有IO都是从 Channel(通道) 开始的. 从通道进行数据读取 :创建一个缓冲区,然后请求通道读 ...

  8. 我所理解的Java NIO

    这两天了解了一下关于NIO方面的知识,网上关于这一块的介绍只是介绍了一下基本用法,没有系统的解释NIO与阻塞.非阻塞.同步.异步之间的联系,导致自己困扰了好久.本篇文章就个人关于NIO的理解进行阐述. ...

  9. 海纳百川而来的一篇相当全面的Java NIO教程

    目录 零.NIO包 一.Java NIO Channel通道 Channel的实现(Channel Implementations) Channel的基础示例(Basic Channel Exampl ...

最新文章

  1. docker入门及安装
  2. 再理解RankNet算法
  3. 牛客 华为机试(我的代码记录)
  4. 推荐算法炼丹笔记:标签工程
  5. HSIC简介:一个有意思的判断相关性的思路
  6. 把自定义url配置到SAP Fiori Launchpad上打开
  7. linux循环脚本while循环,Shell脚本while、until循环语句简明教程
  8. CORS(跨域资源共享)
  9. 查询MySQL字段注释的 5 种方法!
  10. 索引 | ggplot2基础语法系列推文汇总
  11. yuki翻译器钩子_【galgame游戏剧情翻译工具】YUKI整合翻译工具下载
  12. 基于java的智能手表_基于安卓Android智能手环(计步器)APP设计(含录像)
  13. 新版macbook,PPT导出PDF复制文字乱码问题的解决
  14. 基于android的家庭财务通 .apk,毕业设计(论文)-基于Android的家庭财务管家的设计与实现.doc...
  15. 江苏专转本计算机第七章,2013江苏专转本 第七章 无穷级数.ppt
  16. element表格左对齐方法
  17. Leedcode编程题18: 四数之和----C++实现
  18. 三星电子在中国正式召开三星Galaxy Note20系列新品体验发布会~~~~
  19. 痞子衡嵌入式:MCUXpresso IDE下工程链接文件配置管理与自动生成机制
  20. 如何主动学习?IT从业者的学习秘籍

热门文章

  1. 微信小程序,格式化千分位并保留两位小数
  2. python可变类型与不可类型
  3. 可编程控制器是计算机,可编程控制器的工作原理!与我们PC有什么区别呢?
  4. Eureka自我保护机制
  5. IO复用之select、poll、epoll模型
  6. Redis的安装与使用
  7. [Android]Thread线程入门3--多线程
  8. jquery一个元素绑定了多个 click 事件,如何取消其中的一个
  9. python3中maketrans()方法的使用
  10. 除了比特币之外,区块链还能向汽车行业渗透?