Java I/O 流概述
Java 流设计理念
Java 流类继承层次
- 字节输入流
- 字节输出流
- 字符输入流
- 字符输出流
Kotlin I/O基于 Java I/O 流技术,但是 Java I/O 流技术使用起来比较繁琐,Kotlin 提供了很多扩展,是代码变得简洁。
一、Java I/O 流概述
Kotlin I/O 流技术主要来自于 Java I/O 流技术,因此有必要先了解下 Java I/O 流技术。Java 将数据的输入和输出操作当作“流”来处理,“流”是一组有序的数据序列。“流”分为两种形式:输入流和输出流。从数据源中读取数据是输入流,将数据写入到目的地是输出流。
提示:以 CPU 为中心,从外部设备读取数据到内存,进而再读入到 CPU,这是输入(Input,缩写 I)的过程;将内存中的数据写入到外部设备,这是输出(output,缩写 O)的过程。所以输出输出简称为 I/O。
二、Java 流设计理念
数据输入的数据源有多种形式,如文件、网络和键盘灯,键盘是默认的标准输入设备。而数据输出的目的地也有多种形式,如文件、网络和控制台等。
所有的输入形式都抽象为输入流,所有的输出形式都抽象为输出流,它们与设备无关。
三、Java 流类继承层次
以字节为单位的流称为字节流,以字符为单位的流称为字符流。Java 提供 4 个顶层抽象类,两个字节流抽象类:InputStream
和 OutputStream
;两个字符流抽象类:Reader
和 Writer
。
-
1、字节输入流
字节输入流的根类是InputStream
,它有很多子类,这些类的说明如下:
类 | 描述 |
---|---|
FileInputStream | 文件输入流 |
ByteArrayInputStream | 面向字节数组的输入流 |
PipedInputStream | 管道输入流,用于两个线程之间的数据传递 |
FilterInputStream | 过滤输入流,它是一个装饰器,用来扩展其他输入流 |
BufferedInputStream | 缓冲区输入流,它是 FilterInputStream 的子类 |
DataInputStream | 面向基本数据类型的输入流 |
-
2、字节输出流
字节输出流的根类是OutputStream
,它有很多子类,这些类的说明如下:
类 | 描述 |
---|---|
FileOutputStream | 文件输出流 |
ByteArrayOutputStream | 面向字节数组的输出流 |
PipedOutputStream | 管道输出流,用于两个线程之间的数据传递 |
FilterOutputStream | 过滤输出流,它是一个装饰器,用来扩展其他输出流 |
BufferedOutputStream | 缓冲区输出流,它是 FilterInputStream 的子类 |
DataOutputStream | 面向基本数据类型的输出流 |
-
3、字符输入流
字符输入流的根类是Reader
,这类流以 16 位的Unicode
编码表示的字符为基本处理单位。它有很多子类,这些类的说明如下:
类 | 描述 |
---|---|
FileReader | 文件输入流 |
CharArrayReader | 面向字符数组的输入流 |
PipedReader | 管道输入流,用于两个线程之间的数据传递 |
FilterReader | 过滤输入流,它是一个装饰器,用来扩展其他输入流 |
BufferedReader | 缓冲区输入流,它也是一个装饰器,但不是 FilterReader 的子类 |
InputStreamReader | 把字节流转换为字符流,它也是一个装饰器,是 FileReader 的父类 |
-
4、字符输出流
字符输出流的根类是Writer
,这类流以 16 位的Unicode
编码表示的字符为基本处理单位。它有很多子类,这些类的说明如下:
类 | 描述 |
---|---|
FileWriter | 文件输出流 |
CharArrayWriter | 面向字符数组的输出流 |
PipedWriter | 管道输出流,用于两个线程之间的数据传递 |
FilterWriter | 过滤输出流,它是一个装饰器,用来扩展其他输出流 |
BufferedWriter | 缓冲区输出流,它也是一个装饰器,但不是 FilterWriter 的子类 |
OutputStreamWriter | 把字节流转换为字符流,它也是一个装饰器,是 FileWriter 的父类 |
网友评论