https://blog.csdn.net/u012250875/article/details/78341874 转载于此
1、IO
即Input和output的缩写,是对数据的流入和流出的一种抽象。
2、什么是流
从水流、物流、人流可以总结出流的特点:动态的、可转移的,从一处到另一处的。
3、java中io
java为了我们调用方便,而屏蔽输入/输出源和流动细节,抽象出的用于解决数据流动问题的类体系。
4、输入流和输出流
用于读取的流就是输入流,用于写入的流就是输出流。
输入输出的概念一般是针对内存来说的,写入内存(输出流),从内存中读(输入流)。
5、字节流和字符流
输入输出流可操作性的最小单位是字节流和字符流。
字节流:一次操作8Bit,java io体系中字节操作流以stream结尾。
字符流:一次操作16Bit,java io体系中字符操作流以reader和writer结尾。
6、节点流和包装(处理)流
1)节点流偏向实现细节,直接与细节打交道,比如FileInputStream,而包装(处理)流偏功能,以目标功能为抽象,比如PrintStream。
2)区分节点流和包装流最简单的方法就是:处理流的构造方法中需要另外一个流作为参数,而节点流的构造方法则是具体的物理节点。比如,FileInputStream构造方法中需要一个文件路径或者File对象,而PrintStream构造方法中则需要一个流对象new PrintStream(new FileOutputStream(""))
3)包装流使用了装饰者模式,包装流对节点流进行了一系列的强化包装,让包装后的流拥有了更多的操作手段或更高的操作效率,而隐藏节点流底层的复杂性。
7、低级流和高级流
低级流和高级流对应的概念即对应上面的节点流和包装(处理)流概念。
8、普通流和缓冲流。
普通流和缓冲流主要是针对读写性能上提出的相对概念。普通流与缓冲流的区别在于一个一个数据的流动还是一堆一堆数据的流动。
9、BIO,NIO,AIO
BIO:B有两说,一为Base,jdk中最早抽象出的io体系;一为Block,jdk 1.0中的io体系是阻塞的。所以两说都有道理,一般我们认为B取Block之意。
NIO:N也有两说,一为new,针对Base而言,一为non-Block,针对Block而言。
AIO:A为Asynchronous,异步的,异步IO,AIO还有个名字叫NIO2。
发展历程:bio(jdk1.0) -> nio(jdk1.4) -> aio(jdk1.7)