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. SpringMVC_The resource identified by this request is only capable of generating responses with characteristics

    今天在调试springMVC的时候,在将一个对象返回为json串的时候,浏览器中出现异常: The resource identified by this request is only capabl ...

  2. 【C语言】08-数组

    为了让大家更好地学习和理解数组,我们先来认识一下内存中的"地址". 地址 1.计算机中的内存是以字节为单位的存储空间.内存的每一个字节都有一个唯一的编号,这个编号就称为地址.凡存放 ...

  3. MySQL的show语句大全

    常用的MySQL show 语句列举如下: 1.show databases ; // 显示mysql中所有数据库的名称 2.show tables [from database_name]; // ...

  4. 将组策略中的内容导出至CSV格式

    #将组策略首选项中的"本地用户和组"下的所有条目导出 $xml = Get-GPOReport -ReportType Xml -Name "China Desktop ...

  5. Mininet实验 使用l2_multi模块寻找最短路径实验

    参考:使用l2_multi模块寻找最短路径实验 1. 实验目的 1.认识VND并且掌握其基本使用方法. 2.学会使用pox控制器的l2_multi模块寻找主机间的最短传输路径. 2. 实验原理 VND ...

  6. Ubuntu安装Flash

    第一步:打开视频网站,随意点击一个视频,会提示需要先安装Flash,点击它所提供的链接. 第二步:根据系统选择合适的版本进行下载,有红帽的yum版本,我选择的是tar.gz for other Lin ...

  7. PHP json_decode 函数解析 json 结果为 NULL 的解决方法

    在做网站 CMS 模块时,对于模块内容 content 字段,保存的是 json 格式的字符串,所以在后台进行模块内容的编辑操作 ( 取出保存的数据 ) 时,需要用到 json_decode() 函数 ...

  8. jQuery 判断多个 input file 都不能为空

    例如有两个图片上传的 input,都必须上传图片: html 选择文件 1 :<input type="file" name="myfile[]" cla ...

  9. HTML5 viewport 标签与 CSS3 background-size 属性 使图片完全适应区域内容

    要使一张图片不论在移动端还是在桌面端都能适应区域内容,可以使用 HTML5 的 viewport 标签结合 CSS3 的 background-size 属性. 适应区域内容是指图片的宽或高的长度满足 ...

  10. django 1.8 日志配置

    django 1.8 日志配置 以下为setings配置logging代码片段 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(_ ...