如图能够看出,java的io按照包来划分的话能够分为三大块:io、nio、aio,可是从使用角度来看,这三块其实揉杂在一块儿的,下边咱们先来概述下这三块:html
因为本次主要介绍java基本的io类结构,io类的实现相对简单(主要是字节或者字符数组的操做),而nio和aio更多时候咱们关注的是网络编程,要想理解须要对unix网络模型、异步和阻塞等有比较清晰的理解,所以并不会花大量篇幅介绍各个类,示例也仅会给出连接。
快写完的时候看到的一篇,写的赞,果真水平还差的远:深刻分析 Java I/O 的工做机制java
经常使用的类不在介绍,下边主要介绍一些有特殊功能的类linux
管道输入流,熟悉linux系统应该看到pipe应该就明白了,能够实现线程间通讯,须要和PipedReader配套使用。详解和示例编程
根据名字也能看出来,目的事项实现一个流过滤器,可是你会发现实际上是个抽象类,并无实现,这里只是提供了接口。扫了一下发现jdk里边只有Utility的一个JavaWriter的静态类实现了,其功能是将字节转换成有效的java字符。数组
将字节数组做为输入或输出流处理,通常做为中间值,用来将字符数组和其余IO字符处理类转换。下边的ByteArrayInputStream与此相似,不过处理的是字节数组。详解和示例网络
具备回推功能的IO处理类,能够将已读取过的数据再回推到缓冲区中,重复读取(注意通常的流都是单向的,一旦读取出来就不能再读了)。详解和示例app
提供了按照类型或编码读取写入文件的方法,如byte[]、int、short、char、byte、UTF等类型或编码的读写。详解和示例dom
如其名字:顺序输入流,改类容许将多个输入流做为输入,并按照顺序处理多个流,使用的时候当作一个流处理。详解和示例异步
该类与其余IO类有较大不一样,其支持随机读写,对于格式化的记录文件读取颇有优点。此外因为其底层的操做已经改成由nio的FileChannel实现,所以在处理大文件的时候常常使用RandomAccessFile和MappedByteBuffer来读取,不只读取速度更快,并且可以避免文件过大致使内存溢出。详解和示例编码
上图是整理的nio与aio的一些关键点,瞟一眼就好,详细的nio讲解可参考: Java NIO使用及原理分析