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类型的输出流类,而在字符输出流中没有。