图学java基础篇之IO

java io体系


如图能够看出,java的io按照包来划分的话能够分为三大块:io、nio、aio,可是从使用角度来看,这三块其实揉杂在一块儿的,下边咱们先来概述下这三块:html

  • io:主要包含字符流和字节流,咱们经常使用的文件读写,流处理等都要用到,也是本次介绍的重点。jdk1.7以后的io底层部分类经已改成使用阻塞的nio实现了
  • nio:jdk1.4后加入,多路非阻塞(多路IO复用模型),此外还实现了buffer、channel、selector、内存映射文件等实现。咱们直接使用nio多数状况用于网路编程。
  • aio:jdk1.7支持,又叫作nio2,实现了异步非阻塞io。较nio更高效,也主要用于网络编程。

因为本次主要介绍java基本的io类结构,io类的实现相对简单(主要是字节或者字符数组的操做),而nio和aio更多时候咱们关注的是网络编程,要想理解须要对unix网络模型、异步和阻塞等有比较清晰的理解,所以并不会花大量篇幅介绍各个类,示例也仅会给出连接。
快写完的时候看到的一篇,写的赞,果真水平还差的远:深刻分析 Java I/O 的工做机制java

io类结构


经常使用的类不在介绍,下边主要介绍一些有特殊功能的类linux

PipedWriter,PipedReader

管道输入流,熟悉linux系统应该看到pipe应该就明白了,能够实现线程间通讯,须要和PipedReader配套使用。详解和示例编程

FilterReader,FilterWriter

根据名字也能看出来,目的事项实现一个流过滤器,可是你会发现实际上是个抽象类,并无实现,这里只是提供了接口。扫了一下发现jdk里边只有Utility的一个JavaWriter的静态类实现了,其功能是将字节转换成有效的java字符。数组

CharArrayReader,CharArrayWriter

将字节数组做为输入或输出流处理,通常做为中间值,用来将字符数组和其余IO字符处理类转换。下边的ByteArrayInputStream与此相似,不过处理的是字节数组。详解和示例网络

PushbackReader,PushbackInputStream

具备回推功能的IO处理类,能够将已读取过的数据再回推到缓冲区中,重复读取(注意通常的流都是单向的,一旦读取出来就不能再读了)。详解和示例app

DataInputStream,DataOutputStream

提供了按照类型或编码读取写入文件的方法,如byte[]、int、short、char、byte、UTF等类型或编码的读写。详解和示例dom

SequenceInputStream

如其名字:顺序输入流,改类容许将多个输入流做为输入,并按照顺序处理多个流,使用的时候当作一个流处理。详解和示例异步

RandomAccessFile

该类与其余IO类有较大不一样,其支持随机读写,对于格式化的记录文件读取颇有优点。此外因为其底层的操做已经改成由nio的FileChannel实现,所以在处理大文件的时候常常使用RandomAccessFile和MappedByteBuffer来读取,不只读取速度更快,并且可以避免文件过大致使内存溢出。详解和示例编码

其余参考博文(侵删)

nio和aio相关


上图是整理的nio与aio的一些关键点,瞟一眼就好,详细的nio讲解可参考: Java NIO使用及原理分析

相关文章
相关标签/搜索