Java 语言实现的 I/O 模型
1.概述
1.发展历史
JDK 1.4 之前,Java 所提供的网络编程API全部采用了I/O同步阻塞模型
JDK 1.4 引入了非阻塞I/O(NIO)类库,自此Java语言可以支持多路复用I/O模型
JDK 1.7 引入了异步I/O编程类库,被称为NIO2,也叫AIO
2.Java NIO 开源网络通信框架
Mina:Apache
Grizzly:
Netty:JBoss。事件驱动模型,线程模型。TCP/UDP,HTTP协议栈、SSL/TLS、STARTTLS,Applet、Android。
2.Java Classic I/O (Blocking I/O) 介绍
2.1 Streams 字节流 & Writer 与 Reader 字符流
java.io 包提供了对字节流、字符流进行输入/输出操作的多种包装类以适用多种应用场景:
字节流:8 bit,Java Stream
字符流:16 bit,字符集、字符编码
Java_io 体系之目录
2.2 Java blocking I/O 网络通信实现
--客户端Socket的使用方式:
创建Socket对象,使用创建的Socket连接远程主机
建立连接后,从Socket得到输入流与输出流,Socket是全双工通道,可以使用这两个流与服务器之间相互发送数据
--服务端ServerSocket的使用方式:
绑定一个特定的端口创建ServerSocket对象
使用ServerSocket的accept()方法监听这个端口的请求连接,accept()会一直阻塞直到通过某个请求连接与客户端建立连接,此时accept()将返回客户端与服务端的连接的Socket对象
通过Socket对象的getInputStream()与getOutputStream()方法获得与客户端通信的输入流与输出流,进行通信交互
完成交互后关闭连接
3.Java Non-blocking I/O (NIO) 介绍
3.1 Buffer 缓冲区
在Classic I/O库中,数据直接面向Stream写入或者读取,而在NIO库中,数据读取与写入面向的是Buffer对象,这种差异使性能得到了巨大提高
缓冲区实质上是一个数组,java.nio库中提供了Buffer的抽象类
四个属性:0 <= 标记(Mark) <= 位置(Position)<= 上界(Limit)<= 容量(Capacity)
3.2 Channel 通道
Classic I/O中的Stream是单向的,通过OutputStream实现输出流,InputStream实现输入流。而NIO中的Channel是一个全双工通道,可以通过Channel实现同时读取与写入。如果说Buffer是运输沙子的卡车,Channel就是卡车行驶的道路。
文件读写通道、网络读写通道:
FileChannel:
DatagramChannel:通过UDP协议读写网络数据
SocketChannel:通过TCP/IP协议读写网络数据,客户端连接通道
ServerSocketChannel:SocketChannel对应的服务端通道实现,通过监听新的TCP/IP连接,对每一个新的连接创建新的SocketChannel
3.3 Selector 选择器
- Channel在Selector上注册,Selector通过不断轮询注册在其上的Channel,能够感知到Channel可读或者可写事件
3.4 Java I/O 复用网络通信实现
- NIO实现I/O复用模型整个编程模型较为复杂。在实际项目中,一般不会直接使用原生NIO的API构建网络通信程序,而是使用Mina、Netty、Grizzly其中之一来构建我们的网络通信服务。
4.NIO2 及 Asynchoronous I/O 介绍
NIO2主要改进了Classic I/O中java.io.File类对文件操作的局限性
NIO2还带来了真正意义上的Asynchronous I/O(异步I/O),具体实现分为文件Asynchronous I/O与网络传输Asynchronous I/O
4.1 NIO2 在 File 操作方面的升级
Path介绍:URI,FileSystems
Paths、Files工具类介绍
WatchService接口:提供了通过应用程序监听操作系统文件变更事件的能力
4.2 文件读写 Asynchronous I/O
- NIO2通过AsynchronousFileChannel提供了异步读写文件的功能。通过AsynchronousFileChannel异步读写文件有CompletionHandler与Future两种方式。
4.3 Java 异步 I/O 网络通信实现
- NIO2通过引入AsynchronousSocketChannel与AsynchronousServerSocketChannel实现了异步I/O网络通信模型。
Java 语言实现的 I/O 模型相关推荐
- java写的股票技术分析_基于Java语言开发的个性化股票分析技术:量能突破模型(Energe-Break)...
基于Java语言开发的个性化股票分析技术: 量能突破模型(Energe-Break) 一个用量能指标作为判定依据的条件分析模型,根据最近5天内是否有量能平台的突破以及涨跌幅的大小给每只股票评分评价,给 ...
- 重塑云上的 Java 语言
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 Photo @ Toa Heftiba 文 |郁磊 音乐无国界, ...
- Java语言中的生僻知识
最近有一首名叫<生僻字>的流行歌曲火遍大江南北,创作者给佶屈聱牙的生僻字,配上了优美明快的旋律,竟然让歌曲变得琅琅上口.悦耳动听起来,平时不太常见的拒人于千里之外的这些汉字也不再那么陌生, ...
- 计算机java语言答案_【计算机二级Java语言】卷019
选择题 公共知识 [1]下列叙述中正确的是 [A]算法的时间复杂度与计算机的运行速度有关 [B]算法的时间复杂度与运行算法时特定的输入有关 [C]算法的时间复杂度与算法程序中的语句条数成正比 [D]算 ...
- Java语言特性运用:各种Java语法特性是怎样被Spring各种版本巧妙运用的?
Java语法变化 Java5(2004): 枚举.泛型.注解.封箱(解箱)- Java6(2006): @Override接口 Java7(2011): Diamond语法.多Catch.Try- J ...
- java语言_JAVA语言
Java (计算机编程语言) JavaEE:12天掌握Java语言开发 - Java-环境搭建及基础语法 - 创客学院直播室 Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C ...
- 2006年4月全国计算机等级考试二级Java语言程序设计
(考试时间90分钟,满分100分) 一.选择题((1)~(35)每小题2分,共70分) 下列各题A).B).C).D)四个选项中,只有一个选项是正确的,请将正确选项写在答题卡相应位置上,答在试 ...
- Android插件化开发基础之Java类加载器与双亲委派模型
类加载器 Java虚拟机类加载过程是把Class类文件加载到内存,并对Class文件中的数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的java类型的过程. 在加载阶段,java虚拟机需 ...
- dart语言和java语言_Java不是文明语言吗?
dart语言和java语言 几周前,我有机会学习iOS编程. 我的老板认为我更像是"计算机科学家",而不是开发人员,这意味着我可以将自己的知识应用于开发一两个iPad应用程序–我要 ...
最新文章
- 使用码云给同事地址地址注意事项
- Http和Socket连接区别(ZT)
- 分布式事务最经典的七种解决方案
- python函数进阶小结_Python-进阶-functools模块小结
- spoj 	Help the Military Recruitment Office!
- java文件拷贝时 buff给多大合适_Java复制文件
- 经典DL论文研读(part4)--ImageNet Classification with Deep Convolutional Neural Networks
- 淡定的写代码,淡定的人生
- Windows Phone开发(14):数据模板 转:http://blog.csdn.net/tcjiaan/article/details/7350849...
- 三维空间中椭圆的参数方程
- Flutter入门综合练习
- mock.js使用指南
- -ile “……的“ 形容词后缀
- MODBUS TCP/IP通信协议及测试方法
- 大数据相加_大数据的相加和相乘
- 2013年第四届C/C++ A组蓝桥杯省赛真题
- [ARM嵌入式系统开发]第一章之嵌入式系统的软硬件
- 联合循环—25(了解PID原理图1)
- 趁“未老”,再认真一次,我觉得你能更好!
- 计算机研究生男女比,复旦大学各学院研究生男女比例出炉:最低的仅8:100,最高409:100...
热门文章
- mybatis generator使用_SpringBoot整合Mybatis实现自动生成代码 || 附阿里P8独家SpringBoot视频资料...
- SkinSharp皮肤模块源码 原33个皮肤模块
- 计算机教学学生创新能力,职业技术学校创新能力计算机教学论文
- 将一个项目布到服务器上,怎么在云服务器上布项目
- .net foreach 未执行完就到下一行了_PHP五十个提升执行效率的小技巧,和常见问题...
- WordPressmodown收费模板
- 检查xml文件中包含非法xml字符的个数(
- 围观 Joomla, Wordpress 和 Drupal
- WebBrowser部分用法
- 企业类库 add access 2007