声明:本文很多都是网上文章东拼西凑来的,目的是希望能从大体上了解整个 IO,便于自己理解。
一. Java IO 框架介绍
二. 传统 IO 介绍
2.1 基于字节操作 IO(InputStream,OutputStream)
2.2 基于字符操作 IO (Reader,Writer)
2.3 传统 IO 中的 Socket网络通信
三. BIO,NIO,AIO 简介
四.参考,PS,欠缺
一. Java IO 框架介绍
如下图:
在作者的理解中,Java IO 框架首先会分为两个大类,一个是 Java 传统的 IO,另外一个就是涉及到网络通信的 IO。在不涉及到网络通信的 IO 中,即使用我们传统的 IO,分为:
- 基于字节操作的 IO:InputStream,OutputStream 类。
- 基于字符操作的 IO:Reader,Writer类。
- 基于磁盘操作的 IO:File类。
- 基于网络通信的 IO:Socket等类。
那么在涉及到网络通信的 IO这一块,又有
BIO,NIO,AIO,概念如下:
- BIO:同步阻塞。服务器实现模式为 一个连接一个线程,也就是当客户端有请求连接的时候就需要启动一个线程进行处理,如果这个连接不做任何事情,会造成不必要的线程开销,当然可以通过线程池机制来改善。
- NIO:同步非阻塞。服务器实现模式为一个请求一个线程,客户端发送的连接请求都会注册到多路复用器上,多路复用器会轮询到连接有 I/O 请求时才启动一个线程进行处理。
- AIO:异步非阻塞。服务器实现模式为一个有效请求一个线程,客户端的 I/O 请求都是由 OS(操作系统) 先完成了再通知服务器应用去启动相应的线程进行处理。
适用场景介绍:
- BIO适用于连接数目比较小,而且固定的架构中,对服务器资源要求会比较高。
- NIO适用于连接数比较多而且比较短的架构中,比如说聊天服务器,编程有点复杂。
- AIO适用于连接数目比较多,而且连接比较长的架构中,比如相册服务器,充分调用OS(操作系统)参与并发操作,编程比较复杂,JDK7以上支持。
二. 传统 IO 介绍
2.1 基于字节操作 IO(InputStream,OutputStream)
java 的 io 是
装饰者模式的典型例子。首先认识这两个模式:
装饰者模式: