一、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模型相关推荐

  1. Java NIO学习系列六:Java中的IO模型

    前文中我们总结了linux系统中的5中IO模型,并且着重介绍了其中的4种IO模型: 阻塞I/O(blocking IO) 非阻塞I/O(nonblocking IO) I/O多路复用(IO multi ...

  2. Java中五中IO模型详解

    一.前言 在<Unix网络编程>一书中提到了五种IO模型,5种IO模型分别为: 阻塞IO模型.非阻塞IO模型.IO复用模型.信号驱动的IO模型.异步IO模型.下面就分别来介绍一下这5种IO ...

  3. 深入理解Java中的IO

    本文转载自:深入理解Java中的IO 为了方便理解与阐述,先引入两张图 在整个Java.io包中最重要的就是5个类和一个接口. 5个类指的是File.OutputStream.InputStream. ...

  4. java io类型_Java NIO之Java中的IO分类

    前言 前面两篇文章(Java NIO之理解I/O模型(一).Java NIO之理解I/O模型(二))介绍了,IO的机制,以及几种IO模型的内容,还有涉及到的设计模式.这次要写一些更贴近实际一些的内容了 ...

  5. java中io是什么_深入理解Java中的IO

    深入理解Java中的IO 转载自:http://blog.csdn.net/qq_25184739/article/details/51205186 本文的目录视图如下: Java IO概要 a.Ja ...

  6. 理解Java中的IO

    粗略列出并理解Java中的IO 引言:     对程序语言的设计者来说,创建一个好的输入/输出(I/O)系统是一项艰难的任务 < Thinking in Java >   本文的目录视图如 ...

  7. Java网络编程------IO模型的同步/异步/阻塞/非阻塞(1)

    IO模型的同步/异步/阻塞/非阻塞 一.同步/异步/阻塞/非阻塞 1.同步和异步 2.阻塞和非阻塞 3.同步.异步和阻塞.非阻塞组合 二.IO 1.I/O 2.阻塞IO和非阻塞IO 3.同步IO和同步 ...

  8. Java基础之IO模型

    Java基础之IO模型 I/O 常见的IO模型 Java中3种常见的IO模型 BIO(Blocking I/O) NIO(Non-blocking/New I/O) AIO(Asynchronous ...

  9. java中的IO操作总结(一)

    转载:http://www.cnblogs.com/nerxious/archive/2012/12/15/2818848.html    所谓IO,也就是Input与Output的缩写.在java中 ...

最新文章

  1. PL/SQL中查询Oracle大数(17位以上)时显示科学计数法的解决方法
  2. Docker (1) 基本概念和安装
  3. pycharm 快捷键大全
  4. 扫雷游戏(洛谷P2670题题解,Java语言描述)
  5. MySQL服务器变量一
  6. SpingMVC简易学习笔记二(springMVC的请求和响应)
  7. php前台点击按钮导出excel,php上导出excel表格数据-PHP如何将查询出来的数据导出成excel表格(最好做一个按钮)...
  8. 制作扫码连wifi的二维码
  9. A64 base instruction -- orr
  10. meta标签下http-equiv 属性详解
  11. 邮件服务器专用术语,邮件群发中的常见术语
  12. MySQL按条件计数
  13. 计算机屏幕上怎么会有条竖杠,电脑屏幕出现一条竖线
  14. 2019年二级造价工程师讲义视频课件免费下载地址
  15. c语言设计思路和有点不足,C语言总结报告
  16. 音频处理 windows10下python三方库librosa安装
  17. SDR技术原理解析 USRP收发原理
  18. 【videojs】videojs自定义全屏按钮 | videojs全屏移动端弊端 | 创建videojs菜单
  19. 华为认证实验篇-ENSP的安装(附下载地址)
  20. 动态数据可视化图表制作,我只用这款软件

热门文章

  1. Fast Development Kit(FDK)-固件部署与升级
  2. vlan与交换机端口模式Access,Hybrid,Trunk
  3. 通过nginx日志分析网站QPS
  4. 国内第一款Android手机,会用智能手机,就能玩转CRT-9200!国内第一款Android图形显示装置焕新上市!...
  5. 关于 ECDSA ECDH ECDHE
  6. jsp项目中报错:localhost 将您重定向的次数过多
  7. 网络安全术语总结及解释说明
  8. CG-CTF——WP(WEB[一])
  9. web服务器响应头文件,response.setHeader()步骤设置http文件头的值
  10. 【NOI2008】 志愿者招募