JAVA NIO Channel
Basic:
多数通道都是链接到开发的文件描述符的。Channel类提供维持平台独立性的抽象过程。
通道是一种途径,访问和操作操作系统,缓冲区是数据操作点:

Channel类继承结构图:

.png)
通过API主要由接口指定(面向接口),通道实现经常要操作本地操作系统的代码,所以不同操作系统的实现会有根本的差异性,通道接口允许以可控且可抑制的方式来访问底层IO.

IO广义两大类:
File IO、Stream IO 《==》通道两大类:FileChannel(文件通道)、SocketChannel-ServerSocketChannel-DatagramChannel(套接字通道)。
通道的单向和双向:
实现ReadableByteChannel read()方法《==》实现WritableByteChannel write()方法。
ByteChannle:
只是一个提供继承便捷的借口。简化类定义的语法糖。所有通道基本都是双向的。
通道会连接一个特定的IO服务,且通道实例性能受所连接的IO服务的特征限制。
ByteChannel 的read()和write()方法是用ByteBuffer作为参数,返回已传输的字节数,比缓冲区的字节数少或者可能为0,因为一次输出不完,缓冲去的位置会与已传输字节相同数量的前移,如果只进行了部分传输,缓冲区可以被重新提交给通道,并从上次中断的地方继续传输(基于Buffer的positon属性,继续操作postion到limit的数据)。该过程重复进行,直到Buffer.hasRemaining()方法返回false:如下:

/**
* 基于基本channel buffer的文件复制操作
*/
public static void fileTransferByNormal() {
try {
RandomAccessFile afile = new RandomAccessFile("hello.txt", "rw");
RandomAccessFile bfile = new RandomAccessFile("hehe.txt", "rw");
FileChannel ac = afile.getChannel();
FileChannel bc = bfile.getChannel(); ByteBuffer bf = ByteBuffer.allocateDirect(16 * 1024);
while (ac.read(bf) != -1) {
bf.flip();
while (bf.hasRemaining()) {
bc.write(bf);
}
bf.clear();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
Blocking Nonblocking:非阻塞模式不会让调用的线程休眠,要么请求立即完成,或者返回误操作。Stream-oriented可以设置nonblocking。
Socket Channel 继承自SelectableChannel=》Selectors=》多路复用。(非阻塞IO)。
通道关闭:
通道不能被重复利用,打开的通道代表与一个特定IO服务的特定链接并封装该链接的状态,通道关闭则链接丢失。
通道上的多次close(),无影响。
如果一个线程在一个通道上被阻塞同时被中断,则该通道将被关闭,线程抛出ClosedByInterruptException异常。
一个线程的interrupt status被设置,且该线程视图访问一个通道,那么这个通道会被关闭,并抛出ClosedByInterruptException异常。
通道上休眠线程的中断区别于selectors上的休眠线程的中断。
实现InterruptableChannel的Channel可以在任何时候被关闭,同时通道上的休眠线程会被唤醒并接收到一个AsynchronousInterruptedException。异步关闭。
JAVA NIO Channel的更多相关文章
- Java NIO Channel和Buffer
Java NIO Channel和Buffer @author ixenos Channel和Buffer的关系 1.NIO速度的提高来自于所使用的结构更接近于OS执行I/O的方式:通道和缓冲器: 2 ...
- Java NIO Channel之FileChannel [ 转载 ]
Java NIO Channel之FileChannel [ 转载 ] @author zachary.guo 对于文件 I/O,最强大之处在于异步 I/O(asynchronous I/O),它允许 ...
- Java NIO Channel通道
原文链接:http://tutorials.jenkov.com/java-nio/channels.html Java NIO Channel通道和流非常相似,主要有以下几点区别: 通道可以读也可以 ...
- (三:NIO系列) Java NIO Channel
出处: Java NIO Channel 1.1. Java NIO Channel的特点 和老的OIO相比,通道和NIO流(非阻塞IO)主要有以下几点区别: (1)OIO流一般来说是单向的(只能读或 ...
- [翻译] java NIO Channel
原文地址:http://tutorials.jenkov.com/java-nio/channels.html JAVA NIO channels和流的概念很像,下面是他们的一些区别: 你可以对cha ...
- Java NIO Channel to Channel Transfers通道传输接口
原文链接:http://tutorials.jenkov.com/java-nio/channel-to-channel-transfers.html 在Java NIO中如果一个channel是Fi ...
- Java NIO Channel to Channel Transfers
In Java NIO you can transfer data directly from one channel to another, if one of the channels is a ...
- Java NIO Channel 使用
Java NIO 中的 Channel 分类: FileChannel SocketChannel ServerSocketChannel DatagramChannel channel 分类 Fil ...
- 【JAVA】【NIO】3、Java NIO Channel
Java NIO和流量相似,但有些差异: ·通道可读写,流仅支持单向.读或写 ·异步通道读取 ·通道读写器,他们是和Buffer交替 道的实现 下面是Java NIO中最重要的通道的实现: ·File ...
随机推荐
- C#定时任务组件之FluentScheduler
FluentScheduler是.NET开源处理定时任务组件 1.任务的创建注册 public static void TaskActionByMinutes(Action action, int c ...
- linux tree 命令
使用cmder确实是方便了很多,想看命令帮助信息: $ help tree 以图形显示驱动器或路径的文件夹结构. TREE [drive:][path] [/F] [/A] /F 显示每个文件夹中文件 ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(43)-工作流设计-字段分类设计
系列目录 建立好42节的表之后,每个字段英文表示都是有意义的说明.先建立,就知道表的关系和用处了,当然,我的设计只是一个参考,你可能有很多改进的地方. 我们的工作流具体细节流程是这样的: 最终我们的模 ...
- SQL Server-聚焦LEFT JOIN...IS NULL AND NOT EXISTS性能分析(十七)
前言 本节我们来分析LEFT JOIN和NOT EXISTS,简短的内容,深入的理解,Always to review the basics. LEFT JOIN...IS NULL和NOT EXIS ...
- YYModel 源码解读(二)之NSObject+YYModel.h (1)
本篇文章主要介绍 _YYModelPropertyMeta 前边的内容 首先先解释一下前边的辅助函数和枚举变量,在写一个功能的时候,这些辅助的东西可能不是一开始就能想出来的,应该是在后续的编码过程中 ...
- Linux ERRNO
摘自Linux-3.18.20的头文件include/uapi/asm-generic/errno-base.h和include/uapi/asm-generic/errno.h: #define E ...
- iOS绘制收益柱状图
项目需求,参考了其他绘图demo,自己绘制出来了,不过代码改得有点乱,添加了很多变量,时间关系没用太合适的命名,逻辑处理也没进行优化. 看看效果图(虚线区域都是画的,其他区域添加的都是控件),附上源码 ...
- java web学习总结(二十二) -------------------简单模拟SpringMVC
在Spring MVC中,将一个普通的java类标注上Controller注解之后,再将类中的方法使用RequestMapping注解标注,那么这个普通的java类就够处理Web请求,示例代码如下: ...
- vs2013\2015UML系列之-类图
1.UML简介Unified Modeling Language (UML)又称统一建模语言或标准建模语言. 简单说就是以图形方式表现模型,根据不同模型进行分类,在UML 2.0中有13种图,以下是他 ...
- 【JavaWeb】Spring+SpringMVC+MyBatis+SpringSecurity+EhCache+JCaptcha 完整Web基础框架(前言)
一直希望能够搭建一个完整的,基础Web框架,方便日后接一些外快的时候,能够省时省力,终于花了一周的时间,把这个东西搞定了.特此写下此博客,一来是纪念,二来是希望能够为别人提供方便.顺带说一下,恩,组合 ...