java io图_图学java基础篇之IO

java io体系

a4ac74ad5792c1fad6e4d697d4bc71c0.png

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

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 的工作机制

io类结构

2bdb480bf6f9d9dc5d392008ae551e58.png

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

PipedWriter,PipedReader

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

FilterReader,FilterWriter

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

CharArrayReader,CharArrayWriter

将字节数组作为输入或输出流处理,一般作为中间值,用来将字符数组和其他IO字符处理类转换。下边的ByteArrayInputStream与此类似,不过处理的是字节数组。详解和示例

PushbackReader,PushbackInputStream

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

DataInputStream,DataOutputStream

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

SequenceInputStream

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

RandomAccessFile

该类与其他IO类有较大不同,其支持随机读写,对于格式化的记录文件读取很有优势。此外由于其底层的操作已经改为由nio的FileChannel实现,因此在处理大文件的时候经常使用RandomAccessFile和MappedByteBuffer来读取,不仅读取速度更快,而且能够避免文件过大导致内存溢出。详解和示例

其他参考博文(侵删)

nio和aio相关

8f0cd49b5e5fde5a90e540f99dd8cbe9.png

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值