关于JAVA中的IO模型
一、java中IO的分类
java中的IO包括基本IO/BIO/NIO/AIO四种,其实主要是BIO/NIO/AIO三种IO模型。
二、基本IO
基本IO可以从两种方式上进行分类:传输方式和数据操作。
1.传输方式分类
(1)字节流:读取单个字节,处理二进制文件(图片,mp3,视频),主要是给计算机看的。
(2)字符流:读取单个字符,处理文本文件,主要是给人看的。
2.数据操作分类
三、BIO(阻塞IO)
BIO就是blocking IO。最容易理解、最容易实现的IO工作方式,应用程序向操作系统请求网络IO操作,这时应用程序会一直等待;另一方面,操作系统收到请求后,也会等待,直到网络上有数据传到监听端口;操作系统在收集数据后,会把数据发送给应用程序;最后应用程序受到数据,并解除等待状态。
四、NIO(Non-blocking/New IO)
Java 中的 NIO 可以看作是 I/O 多路复用模型(Reactor)。
基本(标准)IO是对字节流的读写,在进行IO之前,首先创建一个流对象,流对象进行读写操作都是按字节 ,一个字节一个字节的来读或写。而NIO把IO抽象成块,类似磁盘的读写,每次IO操作的单位都是一个块,块被读入内存之后就是一个byte[],NIO一次可以读或写多个字节。
Java 中的 NIO ,有一个非常重要的选择器 ( Selector ) 的概念,也可以被称为 多路复用器。通过它,只需要一个线程便可以管理多个客户端连接。当客户端数据到了之后,才会为其服务。
1.通道:
通道 Channel 是对原 I/O 包中的流的模拟,可以通过它读取和写入数据。
通道与流的不同之处在于,流只能在一个方向上移动(一个流必须是 InputStream 或者 OutputStream 的子类),而通道是双向的,可以用于读、写或者同时用于读写。
- FileChannel: 从文件中读写数据;
- DatagramChannel: 通过 UDP 读写网络中数据;
- SocketChannel: 通过 TCP 读写网络中数据;
- ServerSocketChannel: 可以监听新进来的 TCP 连接,对每一个新进来的连接都会创建一个 SocketChannel。
2.缓冲区
发送给一个通道的所有数据都必须首先放到缓冲区中,同样地,从通道中读取的任何数据都要先读到缓冲区中。缓冲区实质上是一个数组。
状态变量:
- capacity: 最大容量;
- position: 当前已经读写的字节数;
- limit: 还可以读写的字节数。
eg.一个大小为 8 个字节的缓冲区,此时 position 为 0,而 limit = capacity = 8。
IO多路复用的实现
五、AIO(异步IO)
异步IO则是采用“订阅-通知”模式: 即应用程序向操作系统注册IO监听,然后继续做自己的事情。当操作系统发生IO事件,并且准备好数据后,在主动通知应用程序,触发相应的函数。
关于JAVA中的IO模型相关推荐
- Java NIO学习系列六:Java中的IO模型
前文中我们总结了linux系统中的5中IO模型,并且着重介绍了其中的4种IO模型: 阻塞I/O(blocking IO) 非阻塞I/O(nonblocking IO) I/O多路复用(IO multi ...
- Java中五中IO模型详解
一.前言 在<Unix网络编程>一书中提到了五种IO模型,5种IO模型分别为: 阻塞IO模型.非阻塞IO模型.IO复用模型.信号驱动的IO模型.异步IO模型.下面就分别来介绍一下这5种IO ...
- 深入理解Java中的IO
本文转载自:深入理解Java中的IO 为了方便理解与阐述,先引入两张图 在整个Java.io包中最重要的就是5个类和一个接口. 5个类指的是File.OutputStream.InputStream. ...
- java io类型_Java NIO之Java中的IO分类
前言 前面两篇文章(Java NIO之理解I/O模型(一).Java NIO之理解I/O模型(二))介绍了,IO的机制,以及几种IO模型的内容,还有涉及到的设计模式.这次要写一些更贴近实际一些的内容了 ...
- java中io是什么_深入理解Java中的IO
深入理解Java中的IO 转载自:http://blog.csdn.net/qq_25184739/article/details/51205186 本文的目录视图如下: Java IO概要 a.Ja ...
- 理解Java中的IO
粗略列出并理解Java中的IO 引言: 对程序语言的设计者来说,创建一个好的输入/输出(I/O)系统是一项艰难的任务 < Thinking in Java > 本文的目录视图如 ...
- Java网络编程------IO模型的同步/异步/阻塞/非阻塞(1)
IO模型的同步/异步/阻塞/非阻塞 一.同步/异步/阻塞/非阻塞 1.同步和异步 2.阻塞和非阻塞 3.同步.异步和阻塞.非阻塞组合 二.IO 1.I/O 2.阻塞IO和非阻塞IO 3.同步IO和同步 ...
- Java基础之IO模型
Java基础之IO模型 I/O 常见的IO模型 Java中3种常见的IO模型 BIO(Blocking I/O) NIO(Non-blocking/New I/O) AIO(Asynchronous ...
- java中的IO操作总结(一)
转载:http://www.cnblogs.com/nerxious/archive/2012/12/15/2818848.html 所谓IO,也就是Input与Output的缩写.在java中 ...
最新文章
- PL/SQL中查询Oracle大数(17位以上)时显示科学计数法的解决方法
- Docker (1) 基本概念和安装
- pycharm 快捷键大全
- 扫雷游戏(洛谷P2670题题解,Java语言描述)
- MySQL服务器变量一
- SpingMVC简易学习笔记二(springMVC的请求和响应)
- php前台点击按钮导出excel,php上导出excel表格数据-PHP如何将查询出来的数据导出成excel表格(最好做一个按钮)...
- 制作扫码连wifi的二维码
- A64 base instruction -- orr
- meta标签下http-equiv 属性详解
- 邮件服务器专用术语,邮件群发中的常见术语
- MySQL按条件计数
- 计算机屏幕上怎么会有条竖杠,电脑屏幕出现一条竖线
- 2019年二级造价工程师讲义视频课件免费下载地址
- c语言设计思路和有点不足,C语言总结报告
- 音频处理 windows10下python三方库librosa安装
- SDR技术原理解析 USRP收发原理
- 【videojs】videojs自定义全屏按钮 | videojs全屏移动端弊端 | 创建videojs菜单
- 华为认证实验篇-ENSP的安装(附下载地址)
- 动态数据可视化图表制作,我只用这款软件
热门文章
- Fast Development Kit(FDK)-固件部署与升级
- vlan与交换机端口模式Access,Hybrid,Trunk
- 通过nginx日志分析网站QPS
- 国内第一款Android手机,会用智能手机,就能玩转CRT-9200!国内第一款Android图形显示装置焕新上市!...
- 关于 ECDSA ECDH ECDHE
- jsp项目中报错:localhost 将您重定向的次数过多
- 网络安全术语总结及解释说明
- CG-CTF——WP(WEB[一])
- web服务器响应头文件,response.setHeader()步骤设置http文件头的值
- 【NOI2008】 志愿者招募