
缓冲流、转换流、序列化流,打印流对于java的作用是什么
此篇将介绍能够高效读写的缓冲流、能够转换编码的转换流、能够持久化存储对象的序列化流等等
一、缓冲流
缓冲流的基本原理,是在创建流对象时,会创建一个内置的默认大小的缓冲区数组,通过缓冲区读写,减少系统IO次数,从而提高读写的效率。
字节缓冲流
构造方法
创建字节缓冲输入流:
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("bis.txt"));
创建字节缓冲输出流:
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("bos.txt"));
代码演示:
输出结果为:
缓冲流使用数组复制时间:10 毫秒
字符缓冲流
构造方法
创建字符缓冲输入流
BufferedReader br = new BufferedReader(new FileReader("br.txt"));
创建字符缓冲输出流
BufferedWriter bw = new BufferedWriter(new FileWriter("bw.txt"));
特有方法
BufferedReader: public String readLine() : 读一行文字。
BufferedWriter: public void newLine() : 写一行行分隔符,由系统属性定义符号。
readLine 方法演示
输出结果为:
ccccc
bbbbb
aaaaa
二、转换流
InputStreamReader类
转换流 java.io.InputStreamReader ,是Reader的子类,,读取字节并使用指定的字符集将其解码为字符。它的字符集可以自定义,也可以用平台的默认字符集。
构造方法
InputStreamReader(InputStream in) : 创建一个使用默认字符集的字符流。
InputStreamReader(InputStream in, String charsetName) : 创建一个指定字符集的字符流。
OutputStreamWriter类
转换流 java.io.OutputStreamWriter ,是Writer的子类,用指定的字符集将字符编码为字节。它的字符集可以自定义,也可以用平台的默认字符集。
构造方法
OutputStreamWriter(OutputStream in) : 创建一个使用默认字符集的字符流。
OutputStreamWriter(OutputStream in, String charsetName) : 创建一个指定字符集的字符流。
代码演示:
三、序列化流
ObjectOutputStream类
java.io.ObjectOutputStream 类,将Java对象的原始数据类型写出到文件,实现对象的持久存储。
构造方法
public ObjectOutputStream(OutputStream out) : 创建一个指定OutputStream的ObjectOutputStream。
对象序列化注意:
该类必须实现 java.io.Serializable 接口,Serializable是一个标记接口,不实现此接口的类将不会使任何状态序列化或反序列化,会抛出 NotSerializableException 。
该类的所有属性必须是可序列化的。如果有一个属性不需要可序列化的,则该属性必须注明是瞬态的,使用 transient 关键字修饰
写出对象方法:
public final void writeObject (Object obj) : 将指定的对象写出
ObjectInputStream类
ObjectInputStream反序列化流,将之前使用ObjectOutputStream序列化的原始数据恢复为对象。
构造方法
public ObjectInputStream(InputStream in) : 创建一个指定InputStream的ObjectInputStream。
对象反序列化注意:
必须是能够找到class文件的类。如果找不到该类的class文件,则抛出一个 ClassNotFoundException 异常。
能找到class文件,但是class文件在序列化对象之后发生了修改,那么反序列化操作也会失败,抛出一个 InvalidClassException 异常
如果能找到一个对象的class文件,我们可以进行反序列化操作,调用 ObjectInputStream 读取对象的方法:
public final Object readObject () : 读取一个对象
代码演示:
四、打印流
PrintStream类
java.io.PrintStream 类,该类能够方便地打印各种数据类型的值
构造方法
public PrintStream(String fileName) : 使用指定的文件名创建一个新的打印流
System.out 就是 PrintStream 类型的,只不过它的流向是系统规定的,打印在控制台上
代码演示:
