Channel可以理解为铁轨,Buffer是铁轨上的火车。铁轨的两端连接这文件描述符或者说文件的缓冲区和程序运行时的内存。借助NIO是一种更加符合OS底层文件系统的调用方式,使用NIO可以用更小的开销实现IO服务。

Channel

  Channel是一个接口,但是接口里的方法非常的少,只有和打开关闭有关的两个方法,诸如read write的方法并没有直接在Channel这个顶层接口定义。一些Channel的具体实现类通过多接口实现来具备不同种类的功能,如实现了ReadableByteChannel的接口具备了读字节的能力,实现了WritableByteChannel的接口具有了写字节的能力,那如果一个Channel对象既实现了ReadableByteChannel又实现了WriteableByteChannel,那么该接口就是一个双工通信的接口,这也是NIO相较于BIO高效的一个地方,当然双工通信的高效性仅仅局限在网络通信中,

public interface Channel extends Closeable {
public boolean isOpen();
public void close() throws IOException; }

  Channel可以分为两类,文件Channel和网络SocketChannel。

打开Channel

  文件Channel的获取是通过一个打开的Stream对象的getChannel方法返回,虽然返回的Channel对象既实现了Read接口也试下了Write接口,但由于Stream读或者写的,因而获得的Channel对象也是只能读或者只能写。即文件Channel的通信方式取决于底层文件句柄的访问方式。

  而SocketChannel才是真正的双工通信Channel。

使用Channel

  SocketChannel可以使用非阻塞式通信,在Socket上的IO操作要么立即完成,要么返回一个结果表明没有进行任何操作。

关闭Channel

  //TO DO

NIO(2):Channel的更多相关文章

  1. Java基础知识强化之IO流笔记73:NIO之 Channel

    1. Java NIO的Channel(通道)类似 Stream(流),但又有些不同: 既可以从通道中读取数据,又可以写数据到通道.但流的读写通常是单向的. 通道可以异步地读写. 通道中的数据总是要先 ...

  2. JAVA基础知识之NIO——Buffer.Channel,Charset,Channel文件锁

    NIO机制 NIO即NEW IO的意思,是JDK1.4提供的针对旧IO体系进行改进之后的IO,新增了许多新类,放在java.nio包下,并对java.io下许多类进行了修改,以便使用与nio. 在ja ...

  3. Java NIO教程 Channel

    Channel是一个连接到数据源的通道.程序不能直接用Channel中的数据,必须让Channel与BtyeBuffer交互数据,才能使用Buffer中的数据. 我们用FileChannel作为引子, ...

  4. 《JAVA NIO》Channel

    3.通道 Channle主要分为两类:File操作对应的FIleChannel和Stream操作对应的socket的3个channe. 1.这3个channel都是抽象类.其具体实现在SPI里面. 2 ...

  5. Java基础知识强化之IO流笔记76:NIO之 Channel(通道)之间的数据传输

    1. 在Java NIO中,如果两个通道中有一个是FileChannel,那你可以直接将数据从一个channel(译者注:channel中文常译作通道)传输到另外一个channel. (1)trans ...

  6. (转)[疯狂Java]NIO:Channel的map映射

    原文出自:http://blog.csdn.net/lirx_tech/article/details/51396268 1. 通道映射技术: 1) 其实就是一种快速读写技术,它将通道所连接的数据节点 ...

  7. netty源码解解析(4.0)-12 Channel NIO实现:channel初始化

    创建一个channel实例,并把它register到eventLoopGroup中之后,这个channel然后处于inactive状态,仍然是不可用的.只有在bind或connect方法调用成功之后才 ...

  8. Java NIO -- 通道 Channel

    通道(Channel):由 java.nio.channels 包定义的.Channel 表示 IO 源与目标打开的连接.Channel 类似于传统的“流”.只不过 Channel本身不能直接访问数据 ...

  9. Java NIO 之 Channel(通道)

    历史回顾: Java NIO 概览 Java NIO 之 Buffer(缓冲区) 其他高赞文章: 面试中关于Redis的问题看这篇就够了 一文轻松搞懂redis集群原理及搭建与使用 一 Channel ...

  10. 【Java nio】Channel

    package com.slp.nio; import org.junit.Test; import java.io.*; import java.nio.ByteBuffer; import jav ...

随机推荐

  1. C Primer Plus--C预处理器和C库(2)

    目录 #include指令 头文件 其他指令 #undef 条件编译 内联函数 #include指令 #include <头文件.h>//在标准系统目录中寻找头文件 #include &q ...

  2. D3.js的v5版本入门教程(第十二章)—— D3.js中各种精美的图形

    D3.js的v5版本入门教程(第十二章) D3中提供了各种制作常见图形的函数,在d3的v3版本中叫布局,通过d3.layout.xxx,来新建,但是到了v5,新建一个d3中基本的图形的方式变了(我也并 ...

  3. 因在缓存对象中增加字段,而导致Redis中取出缓存转化成Java对象时出现反序列化失败的问题

    背景描述 因为业务需求的需要,我们需要在原来项目中的一个DTO类中新增两个字段(我们项目使用的是dubbo架构,这个DTO在A项目/服务的domain包中,会被其他的项目如B.C.D引用到).但是这个 ...

  4. redis-sentinel 高可用方案实践

    近期公司的一块核心业务使用redis作为配置转发中心,存在单点问题,考虑服务的可靠性.针对业务需求,我们确定了我们的需求: 异地跨机房容灾 故障自动切换 尽可能高的保证数据不丢失 针对以上需求,我们分 ...

  5. [转]Json字符串和map和HashMap之间的转换

    需要导入alibaba.fastJsonmaven中的依赖为 <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson --> ...

  6. /etc/bashrc

    [ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[\[\e[34;1m\]\u@\[\e[0m\]\[\e[3 ...

  7. 《精通CSS第3版》(6)内容布局(定位+水平布局)

  8. mysql 中 int 等类型如何选择

    详见:https://blog.csdn.net/samll_snail/article/details/86534719 .

  9. [LeetCode] 97. Interleaving String 交织相错的字符串

    Given s1, s2, s3, find whether s3 is formed by the interleaving of s1and s2. Example 1: Input: s1 = ...

  10. 【Python学习之十】操作数据库

    环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 python3.6 操作mysql数据库 1.安装pymysql模块p ...