IO流分类大全 - 极悦
首页 课程 师资 教程 报名

IO流分类大全

  • 2020-11-19 17:22:27
  • 2401次 极悦

我们在初学Java时,不可避免地要学习到IO流,事实上,IO流对于初学者来说是一个很头疼的东西,Java IO 体系看起来类很多,感觉很复杂,但其实是 IO 涉及的因素太多了。在设计 IO 相关的类时,编写者也不是从同一个方面考虑的,所以会给人一种很乱的感觉,并且还有设计模式的使用,使得IO流分类更加复杂,所以本文特地对Java的IO流进行全面的分类。

我们将根据下面的IO流分类图来对IO流进行介绍:

image.png

Java流的分类方法大致分为以下几种:

1.按流向划分,分为输入流、输出流

请注意,这里的流向是以程序的运行时内存为参照的。

输入流类名中包含关键字InputStream或Reader,输出流类名中包含关键字OutputStream或Writer。

2.按操作的数据单元类型划分,分为字节流、字符流

字节流操作的数据单元是8位的字节(byte),字符流操作的是16位的字符。

字节流类名中包含关键字InputStream或OutputStream,字符流类名中包含关键字Reader或Writer。

请注意,系统输入输出(System.in与System.out)都为字节流。

3.按流的角色来划分,分为节点流与处理流

节点流是指程序可以向一个特定的节点读写数据,直接连接数据源;

这个节点最常见的是文件,类名中包含关键字File;还可以是数组、管道、字符串,关键字分别为ByteArray/CharArray,Piped,String。

处理流并不直接连接数据源,它大多情况是对已存在的节点流进行包装,是一种典型的装饰器设计模式。使用处理流主要是为了更方便的执行输入输出工作,如PrintStream,输出功能很强大,推荐输出时都使用处理流包装。

注意:一个IO流可以即是输入流又是字节流又或是以其他方式分类的流类型,是不冲突的。比如FileInputStream,它既是输入流又是字节流还是文件节点流。

4.一些特别的的流类型

转换流,转换流只有字节流转换为字符流,因为字符流使用起来更方便,我们只会向更方便使用的方向转化。如:InputStreamReader与OutputStreamWriter。

缓冲流,有关键字Buffered,也是一种处理流,为其包装的流增加了缓存功能,提高了输入输出的效率,增加缓冲功能后需要使用flush()才能将缓冲区中内容写入到实际的物理节点。但是,在现在版本的Java中,只需记得关闭输出流(调用close()方法),就会自动执行输出流的flush()方法,可以保证将缓冲区中内容写入。

对象流,有关键字Object,主要用于将目标对象保存到磁盘中或允许在网络中直接传输对象时使用(对象序列化),具体可参看博客Java序列化与反序列化。

推回输入流,有关键字PushBack,当程序调用推回输入流的unread()方法时,系统回把指定数组内容的内容推回到一个推回缓冲区中,在调用read()方法读入内容时,就先从推回缓冲区中读取,直到读完推回缓冲区中内容后才会从原输入流中读取。

流是一种抽象概念,它代表了数据的无结构化传递。IO流就是以流的方式进行输入输出,因此,IO流也是以此为基础来进行分类的。看完了本文对IO流分类的讲解,小伙伴们是不是已经彻底掌握了呢?如果还没有掌握IO流的分类也没有关系,本站的Java基础教程里还有更详细的讲解,一定能让你轻松掌握IO流分类。

选你想看

你适合学Java吗?4大专业测评方法

代码逻辑 吸收能力 技术学习能力 综合素质

先测评确定适合在学习

在线申请免费测试名额
价值1998元实验班免费学
姓名
手机
提交