1.字节流

字节流顾名思义,传递的数据类型为字节。字节流分为两种,字节输入流(InputStream)和字节输出流(OutputStream)。

1.1字节输入流

InputStream是所有字节输入流的超类。下图是字节输入流的框架:

ByteArrayInputStream是字节数组输入流。

PipedInputStream 是管道输入流,和PipedOutputStream配套使用,用于线程间的通信。

FilterInputStream是过滤输入流,用来装饰其他输入流。FilterInputStream有两个子类:DataInputStream和BufferedInputStream。

DataInputStream是数据输入流,它“允许应用程序以与机器无关方式从底层输入流中读取基本java数据类型数据”。

BufferedInputStream是缓存输入流,作用是为另一个对象增加缓存功能。

FileInputStream是文件输入流,用于对文件读取操作。

ObjectInputStream是对象输入流,和ObjectOutputStream一起,提供“基本数据或对象”的持久存储。

1.2自己输出流

OutputStream是所有字节输出流的超类。下图是字节输出流的框架:

ByteArrayOutputStream是字节数组输出流,写入字节数组输出流的内容被写进一个字节数组。可以通过toByteArray()和toString()获取写入数据。

PipedOutputStream是管道输出流,和PipedInputStream联合使用,用于线程间的通信。

FilterOutputStream是过滤输出流,用来装饰其他输出流。子类有:DataOutputStream、BufferedOutputStream、PrintStream。

DataOutputStream是数据输出流,支持“应用程序以与机器无关方式向底层输出流中写入java基本数据类型数据”。

BufferedOutputStream是缓冲输出流,用来装饰其他输出流,使其具有缓冲功能。

PrintStream是打印输出流,用来装饰其他输出流,使他们能够方便的打印各种数据值表示形式。

FileOutputStream是文件输出流,使文件具有写入功能。

ObjectOutputStream是文件输出流,和ObjectStream一起,提供对“基本数据和对象”的持久存储。

1.3字节输入流和字节输出流对应关系

2.字符流

字符流顾名思义,传递的数据类型为字符。字符流分为两种,字符输入流(Reader)和字符输出流(Writer)。

2.1字符输入流

Reader是所有字符输入流的超类,字符输入流的框架,如图所示:

CharArrayReader是字符数据输入流,用来读取字符数组。

PipedReader是管道输入流,与PipedWriter配合使用,用于线程间的通讯。

FilterReader是字符类型的过滤输入流,用来装饰其他输入流。

BufferedReader是字符类型的缓冲输入流,用给其他输入流赋予缓冲功能。

InputStreamReader是字节转字符的输入流,是字节流通向字符流的桥梁,通过指定CharSet将字节转换为字符。

FileReader是InputStream的子类,用途是使文件具有读取功能。

2.2字符输出流

Writer是字符输出流的超类,字符输出流的框架,如图所示:

CharArrayWriter是字符数组输出流,用途是输入字符数组。

PipedWriter是字符管道输出流,与PipedReader配合使用,用于线程间的通信。

FilterWriter是字符过滤输出流,用于装饰其他输出流。

BufferedWriter是字符缓冲输出流,用于装饰其他输出流,使其具有缓冲功能。

PrintWriter是字符打印输出流,用于装饰其他输出流,使其方便的打印各种数据类型的表示形式。

OutputStreamWriter是字节转字符的输出流,用于装饰其他输出流,通过指定CharSet将字节转化为字符并写入。

FileWriter是OutputStream的子类,用来装饰其他输入流,使文件具有写入功能。

2.3字符输入流和字符输出流的对应关系

3.字节输入流和字符输入流对比

字节输入流和字符输入流相比有三点不同:

a.在字节输入流中FilterInputStream是DataInputStream和BufferedInputStream的父类。而在字符输入流中FilterReader和BufferedReader是评级,且在字符输入流中没有Data类型的类;

b.在字节输入流中,FileInputStream是超类InputStream的子类 ,而在字符输入流中,FileReader是InputStream的子类。

c.在字节输入流中,有Object类型的类ObjectInputStream。而字符输入流中没有。

4.字节输出流与字符输出流对比

字节输出流与字符输出流相比有三点不同:

a.字节输出流FilterOutputStream有三个子类:DataOutputStream、BufferedOutputStream、PrintStream。而在字符输出流中,FilterWriter、BufferredWriter、PrintWriter是同级,且不存在Data类型的字符输出流类。

b.在字节输出流中,FileOutputStream是OutputStream的父类,而在字符输出流中FileWriter是OutputStreamWriter的子类。

c.在字节输出流中有Object类型的输出流类,而在字符输出流中没有。