3、通道

Channle主要分为两类:File操作对应的FIleChannel和Stream操作对应的socket的3个channe。

1、这3个channel都是抽象类。其具体实现在SPI里面。

2、这3个channel都是双向的,都实现了ByteChannel。

3、网络Channel可工作在非阻塞模式下,是可配置的FileChannel在NIO里面只能工作在阻塞模式下。

4、4个Channel的操作都是可中断的。可中断的语义如下

问题:stream操作除了socket还有其他的吧?例如串口等

为什么FIleChannel不能工作在非阻塞模式下?

3.1.1打开通道

通道可以以多种方式创建。Socket 通道有可以直接创建新socket 通道的工厂方法。但是一个FileChannel 对象却只能通过在一个打开的RandomAccessFile、FileInputStream 或 FileOutputStream对象上调用getChannel( )方法来获取。您不能直接创建一个FileChannel 对象。File 和socket 通道会

SocketChannel sc = SocketChannel.open( );
sc.connect (new InetSocketAddress ("somehost", someport));
ServerSocketChannel ssc = ServerSocketChannel.open( );
ssc.socket( ).bind (new InetSocketAddress (somelocalport));
DatagramChannel dc = DatagramChannel.open( );
RandomAccessFile raf = new RandomAccessFile ("somefile", "r");
FileChannel fc = raf.getChannel( );

Reader和Writer不能用来产生Channel

3.1.2使用通道

1、Channel是针对于Byte操作的

2、ReadonluByteChannel和WritableByteChannel是单双工的,ByteChannle是全双工的。

3、每一个file和socket的channle都实现了ByteChannel,按理来说都应该是全双工的,socket的channel确实是全双工的,但是FileChannel则不一定。因为文件channel是和文件相关的,会受到文件的打开方式和文件的权限。

我们知道,一个文件可以在不同的时候以不同的权限打开。从FileInputStream 对象的getChannel( )方法获取的FileChannel 对象是只读的,不过从接口声明的角度来看却是双   向的,因为FileChannel 实现ByteChannel 接口。在这样一个通道上调用write( )方法将抛出未经检查的NonWritableChannelException 异常,因为FileInputStream 对象     总是以read-only 的权限打开文件。

4、通道可以以阻塞(blocking)或非阻塞(nonblocking)模式运行。非阻塞模式的通道

《JAVA NIO》Channel的更多相关文章

  1. 《JAVA NIO》第二章缓冲区

    1.缓冲区的构成 2.缓冲区的类图 3.ByteBuffer ByteBuffer是直接和Channel打交道的,准确的是直接字节缓冲. 问题:直接字节缓冲区和内存映射的关系 4.ByteOrder ...

  2. 《JAVA NIO》第一章 简介

    1.2 CPU已不再是束缚 相反,是JVM 自身在I/O 方面效率欠佳.操作系统与Java 基于流的I/O模型有些不匹配. 操作系统要移动的是大块数据(缓冲区),这往往是在硬件直接存储器存取(DMA) ...

  3. 《JAVA NIO》读书笔记

    第一章 简介 第二章 缓冲区 第三章  channel

  4. Java NIO 之 Channel(通道)

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

  5. 《Java NIO (中文版)》【PDF】下载

    <Java NIO (中文版)>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230062530 NIO (中文版)>[PDF]& ...

  6. 2016-2017-2 《Java程序设计》教学进程

    2016-2017-2 <Java程序设计>教学进程 目录 考核方式 课前准备 教学进程 第00周学习任务和要求 第01周学习任务和要求 第02周学习任务和要求 第03周学习任务和要求 第 ...

  7. 2015-2016-2 《Java程序设计》教学进程

    2015-2016-2 <Java程序设计>教学进程 目录 考核方式 寒假准备 教学进程 第00周学习任务和要求 第01周学习任务和要求 第02周学习任务和要求 第03周学习任务和要求 第 ...

  8. 20145212 《Java程序设计》第8周学习总结

    20145212 <Java程序设计>第8周学习总结 教材学习内容总结 第十四章 NIO与NIO2 认识NIO NIO使用频道(Channel)来衔接数据节点,在处理数据时,NIO可以让你 ...

  9. 20145206邹京儒《Java程序设计》第8周学习总结

    20145206 <Java程序设计>第8周学习总结 教材学习内容总结 第十四章 NIO与NIO2 14.1 认识NIO NIO使用频道(Channel)来衔接数据节点,在处理数据时,NI ...

随机推荐

  1. WebRTC手记之本地视频采集

    转载请注明出处:http://www.cnblogs.com/fangkm/p/4374610.html 前面两篇文章介绍WebRTC的运行流程和使用框架接口,接下来就开始分析本地音视频的采集流程.由 ...

  2. mybatis 调用存储过程 返回游标 实例

    存储过程示例: create or replace procedure Fsp_Plan_CheckPrj(v_grantno varchar2, v_deptcode number, v_curso ...

  3. java+easyui实例

    1.首先引入easyui包 在jsp页面上引用以下文件: <link rel="stylesheet" type="text/css" href=&quo ...

  4. log4net配置文件设置

    windows服务执行cmd命令 最长公共子字符串 log4net配置文件设置 2011-11-16 13:15:41|  分类: Notes |  标签: |字号大中小 订阅     log4net ...

  5. win7(32/64)+apache2.4+php5.5+mysql5.6 环境搭建配置

        引用自:http://blog.csdn.net/z_cf1985/article/details/22454749 环境:win7 32.(64位的同理,下载相关软件必须是对应的64位版本) ...

  6. 字符串&数组的相互转换

    字符串 -> 数组 方法一: $str = "abcd" $s2 = $str.GetEnumerator()  #$s2是无法使用下标的方式进行索引的,因为其不是array ...

  7. yii2.0安装创建应用shiyong 归档文件安装

    环境是wamp在本机开发 http://www.yiiframework.com/download/ Install from an Archive File Download one of the ...

  8. 动态input file多文件上传到后台没反应的解决方法!!!

    其实我也不太清除具体是什么原因,但是后面就可以了!!! 我用的是springMVC 自带的文件上传 1.首先肯定是要有springMVC上传文件的相关配置! 2.前端 这是动态input file上传 ...

  9. freeswitch

    FreeSWITCH 是一个电话的软交换解决方案,包括一个软电话和软交换机用以提供语音和聊天的产品驱动.FreeSWITCH 可以用作交换机引擎.PBX.多媒体网关以及多媒体服务器等.可以用作一个简单 ...

  10. C++ 中的模板类声明头文件和实现文件分离后,如何能实现正常编译?

    C++ 中的模板类声明头文件和实现文件分离后,如何能实现正常编译? 这个feature叫做Export Template,即外名模板,它的作用在于使得模板代码可依照C/C++语言习惯,将模板声明和实现 ...