IO流体系结构,均基于四个顶层的抽象类
– 对于字节流来说
-
- InputStream:表示所有字节输入流的父类。
– InputStream的子类,写法都是XxxInputStream.
-
- OutputStream:表示所有字节输出流的父类。
– OutputStream的子类,写法均是XxxOutputStream.
– 对于字符流来说
-
- Reader:表示所有字符输入流的父类。
– Reader的子类,写法都是XxxReader.
-
- Writer:表示所有字符输出流的父类。
– Writer的子类,写法都是XxxWriter.
– 节点流和包装流
-
- 节点流:流对象来说,能够直接操作数据源的。
- 包装流:以节点流或包装流作为构造方法的参数。无法直接访问数据源。
注意:所有跨出JVM区域的操作对象,必须要关闭。
字节流输出流 字节输入流 OutputStream InputStream FileOutputStream FileInputStream 节点流 File ByteArrayOutputStream ByteArrayInputStream 节点流 字节数组 BufferedOutputStream BufferedInputStream 包装流流 缓冲区 DataOutputStream DataInputStream 包装流 基本类型 ObjectOutputStream ObjectInputStream 包装流 对象 PrintStream 向外输出 |
字符流输出流 字符输入流 Writer Reader FileWriter FileReader 文件 BufferedWriter BufferedReader 包装流 缓冲 OutputStreamWriter InputStreamReader 包装流 编码解码 PrintWriter |
字节流体系结构
InputStream和OutputStream体系
– FileInputStream和FileOutputStream
-
- 节点流,可操作数据源文件
– ByteArrayInputStream和ByteArrayOutputStream
-
- 节点流,内存
– BufferedInputStream和BufferedOutputStream
-
- 包装流,实现缓冲
– DataInputStream和DataOutputStream
-
- 包装流,操作基本数据类型和String
– ObjectInputStream和ObjectOutputStream
-
- 包装流,操作基本数据类型和对象。
- 实现序列化和反序列化
-
-
– 序列化:将内存中的对象保存到文件系统中。
– 反序列化:保存在文件系统中的对象读取到内存中。
-
-
– PrintStream
-
- 打印流,节点流,包装流,自动刷新,方便打印输出println方法。
字符流
对于IO其实都是以字节流形式操作。在实际使用中,文本数据比较常用,为了方便操作文本数据,对字节流进行封装,形成了字符流。
注意:
1- 字符流底层操作也是字节数据,只是对字节数据进行了处理。
2- 字符流对象中,含有码表。如果不指定,默认为JVM中的字符编码。
Reader和Writer体系
– FileReader和FileWriter
– BufferedReader和BufferedWriter
– InputStreamReader和OutputStreamWriter
– PrintWriter
Reader和Writer体系
– Reader类
- 用于读取字符流的抽象类
– Writer
- 用于写入字符流的抽象类
- 含有写入字符串的方法:write(String str)
FileReader和FileWriter类
– 属于节点流,此时数据源是文件。
– 与FileInputStream,FileOutputStream类似,不同之处在于一次读取一个字符。
– FileReader和FileWriter类中的方法,都是继承自其父类。
BufferedReader和BufferedWriter
– 属于过滤流,用于提供缓冲功能。
– BufferedReader
- 除了读取的各个方法,还提供了readLine()方法,用于读取一行字符。
– BufferedWriter
- 除了写入的各个方法,还提供了newLine()方法,用于换行。
- ‘ ’用于换行,但不支持跨平台。newLine()方法,可跨平台。
InputStreamReader和OutputStreamWriter
– 转换流,可以在byte<->char之间互相转换;在转换的过程中,可以指定字符编码。
– InputStreamReader
- byte->char(解码)
– OutputStreamWriter
- char->byte(编码)
PrintWriter / PrintStream
– 提供方便打印字符的各种方法。可以当做节点流,也可以当做过滤流。
– 与 PrintStream 类不同,如果启用了自动刷新,则只有在调用 println、printf 或 format 的其中一个方法时才可能完成此操作,而不是每当正好输出换行符时才完成。
– 构造方法:
- 构造方法中可以有File, String, Writer(有刷新的重载构造方法),除此之外,还包含OutputStream(含有刷新的重载构造方法)(因为中间使用了OutputStreamWriter转换流)。
- println,print方法。