转自 UFAN0
数据流不熟悉,各层流的包装常常把我弄糊涂,翻阅API也不是很方便理清其结构,所以总结一下基础知识点吧。
介绍
数据流(Stream)
是一组有顺序的、有起点和终点的字节集合,是对输入和输出的总称和抽象。
流的划分及简单描述
-
数据流一般分为
输入流(InputStream)
和输出流(OutputStream)
。
输入流只能读不能写,而输出流只能写不能读。 -
Java主要定义了两种类型的流:字节流和字符流。
字节流以字节为基本处理单位,字符流以字符为基本处理单位(采用统一的编码标准)。某些场合字符流比字节流更有效。
字节流
字节流在顶层有两个抽象类:InputStream
和OutputStream
,定义了所有关键字节流的关键方法。最重要的两种方法是read()
和write()
,它们分别用于读和写字节。两种方法都在InputStream
和OutputStream
中被定义为抽象方法,它们被不同的子类重写,可应用于不同的场景。
流 | 描述 |
---|---|
InputStream | 表示字节输入流的抽象类,是其他流的父类 |
FileInputStream | 文件字节输入流 |
FilterInputStream | 过滤字节输入流,提供拓展功能的输入流 |
BufferedInputStream | 缓冲输入流,可以在其他的流的基础上构建缓存,是FilterInputStream 的子类 |
DateInputStream | 包含读取Java标准数据类型方法的输入流,是FilterInputStream 的子类 |
ObjectInputStream | 对象输入流,用于对象串行化 |
流 | 描述 |
---|---|
OutputStream | 表示字节输出流的抽象类,是其他流的父类 |
FileOutputStream | 文件字节输出流 |
FilterOutputStream | 过滤字节输出流,提供拓展功能的输出流 |
BufferedOutputStream | 缓冲输出流,可以在其他的流的基础上构建缓存,是FilterOutputStream 的子类 |
DateOutputStream | 包含读取Java标准数据类型方法的输出流,是FilterOutputStream 的子类 |
PrintStream | 打印流,包含print() 和println() 的输出流,是标准输出流System.out 使用的流 |
ObjectOutputStream | 对象输出流,用于对象串行化 |
字符流
字符流在顶层有两个抽象类:Reader
和Writer
,定义了所有关键字符流的关键方法。最重要的两种方法是read()
和write()
,它们分别进行字符数据的读和写。这些方法被不同的子类重写,可应用于不同的场景。
流 | 描述 |
---|---|
Reader | 表示字符输入流的抽象类,是其他流的父类 |
BufferedReader | 带缓冲功能的字符输入流 |
InputStreamReader | 字节输入流向字符输入流转化的流 |
FileReader | 文件字符输入流,是InputStreamReader 的子类 |
流 | 描述 |
---|---|
Writer | 描述字符输出流的抽象类,是其他流的父类 |
BufferedWriter | 带缓冲功能的字符输出流 |
OutputStreamWriter | 字节输出流向字符输出流转化的流 |
PrintWriter | 打印字符输出流,类似PrintStream |
FileWriter | 文件字符输出流,是OutputStreamWriter 的子类 |
字节流的使用
待续
字符流的使用
待续
串行化
待续