《JAVA NIO》Channel
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的更多相关文章
- 《JAVA NIO》第二章缓冲区
1.缓冲区的构成 2.缓冲区的类图 3.ByteBuffer ByteBuffer是直接和Channel打交道的,准确的是直接字节缓冲. 问题:直接字节缓冲区和内存映射的关系 4.ByteOrder ...
- 《JAVA NIO》第一章 简介
1.2 CPU已不再是束缚 相反,是JVM 自身在I/O 方面效率欠佳.操作系统与Java 基于流的I/O模型有些不匹配. 操作系统要移动的是大块数据(缓冲区),这往往是在硬件直接存储器存取(DMA) ...
- 《JAVA NIO》读书笔记
第一章 简介 第二章 缓冲区 第三章 channel
- Java NIO 之 Channel(通道)
历史回顾: Java NIO 概览 Java NIO 之 Buffer(缓冲区) 其他高赞文章: 面试中关于Redis的问题看这篇就够了 一文轻松搞懂redis集群原理及搭建与使用 一 Channel ...
- 《Java NIO (中文版)》【PDF】下载
<Java NIO (中文版)>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230062530 NIO (中文版)>[PDF]& ...
- 2016-2017-2 《Java程序设计》教学进程
2016-2017-2 <Java程序设计>教学进程 目录 考核方式 课前准备 教学进程 第00周学习任务和要求 第01周学习任务和要求 第02周学习任务和要求 第03周学习任务和要求 第 ...
- 2015-2016-2 《Java程序设计》教学进程
2015-2016-2 <Java程序设计>教学进程 目录 考核方式 寒假准备 教学进程 第00周学习任务和要求 第01周学习任务和要求 第02周学习任务和要求 第03周学习任务和要求 第 ...
- 20145212 《Java程序设计》第8周学习总结
20145212 <Java程序设计>第8周学习总结 教材学习内容总结 第十四章 NIO与NIO2 认识NIO NIO使用频道(Channel)来衔接数据节点,在处理数据时,NIO可以让你 ...
- 20145206邹京儒《Java程序设计》第8周学习总结
20145206 <Java程序设计>第8周学习总结 教材学习内容总结 第十四章 NIO与NIO2 14.1 认识NIO NIO使用频道(Channel)来衔接数据节点,在处理数据时,NI ...
随机推荐
- CSS透明度大汇总
近年来,CSS不透明算得上是一种相当流行的技术,但在跨浏览器支持上,对于开发者来说,可以说是一件令人头疼的事情.目前还没有一个通用方法,以确保透明度设置可以在目前使用的所有浏览器上有效. 这篇汇总主要 ...
- 【C语言】06-基本数据类型
C语言有丰富的数据类型,因此它很适合用来编写数据库,如DB2.Oracle都是C语言写的. C语言的数据类型大致可以分为下图中的几类: 回到顶部 一.变量 跟其他语言一样,C语言中用变量来存储计算过程 ...
- DirSync: List of attributes that are synced by the Azure Active Directory Sync Tool
http://social.technet.microsoft.com/wiki/contents/articles/19901.dirsync-list-of-attributes-that-are ...
- HashTable的典型用法以及参考实例
Get-ADComputer -Identity "cnhzpd-f7sc83x" | select -property @{name="computername&quo ...
- MySQL助理配置
基本配置 你需要经常察看以下3个配置项.不然,可能很快就会出问题. innodb_buffer_pool_size:这是你安装完InnoDB后第一个应该设置的选项.缓冲池是数据和索引缓存的地方:这个值 ...
- [IT学习]PowerBi 入门
从哪里开始呢?注册一个账号,从PowerBi的help开始就行了.Get Started会带领你从get data讲起,建立dataset,建立report,一直到dashboard创建. 下面这个链 ...
- #define与运算精度问题探究
#include <stdio.h> #define SQR(X) X*X int main(int argc, char* argv[]) { ; ; ; printf("SQ ...
- Yii源码阅读笔记(十二)
Action类,控制器中方法的基类: namespace yii\base; use Yii; /** * Action is the base class for all controller ac ...
- Ruby--正则
1. 只取数字(用的是字符串替换) gsub(/[^0-9]/, “”)
- github 有名的问题【ERROR: Permission to .git denied to user】
小乌龙 以前一直是单兵做战,所以github repo对于我而言,只是一个存放.同步.备份代码的地方,协同作用完全没有体现出来. 最近跟朋友一起开发一个项目,他在github建了个公共的repo,我正 ...