← 返回首页
JavaSE系列教程(七十)
发表时间:2020-02-18 23:35:58
讲解java 中 IO流的基本概念

1.I/O流的基本概念

I/O类库中使用“流”这个抽象概念。Java对设备中数据的操作是通过流的方式。流是一组有序的,有起点和终点的字节集合,是对数据传输的总称和抽象。即数据在两设备之间的传输称为流,流的本质是数据传输,根据数据传输的特性将流抽象为各种类,方便进行更直观的数据操作。

2.流的分类

1)字节流和字符流

我们知道电脑里的文件分为字节文件和字符文件,字节流就是专门用来读写字节文件,如图片、视频等(当然实际上字节流可以读写任意电脑文件,只不过字符文件更适合使用字符流读写以提升效率)。字符流就是专门用来读写字符文件的。

简单来说 字节流:类名以Stream结尾的,每次读取(写出)一个字节,当传输的字符文件有中文时,就会出现乱码。 字符流:类名以Reader/Writer结尾的,每次读取(写出)两个字节,有中文时,使用该流就可以正确传输显示中文。

字节流与字符流的对比如下图所示:

2)输入流和输出流

什么叫输入流?什么叫输出流?用一根管道一端插进文件里程序里面,然后开始读数据,那么这是输入还是输出呢?如果站在文件的角度上,这叫输出(Output),如果站在程序的角度上,这叫输入(Input)。

简单来说:以Input开头的是输入流类,以Output开头的是输出流类。

3)节点流和处理流 节点流:以从或向一个特定的地方(节点)读写数据。如FileInputStream 

处理流:是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写。如BufferedReader。处理流的构造方法总是要带一个其他的流对象做参数。一个流对象经过其他流的多次包装。

节点流就是一根管道直接插到数据源上面,直接读数据源里面的数据,或者是直接往数据源里面写入数据。典型的节点流是文件流:文件的字节输入流(FileInputStream),文件的字节输出流(FileOutputStream),文件的字符输入流(FileReader),文件的字符输出流(FileWriter)。

处理流是包在别的流上面的流,相当于是包到别的管道上面的管道。

3.IO流类图结构