一、缓冲流1. 概述:
缓冲流,也叫高效流,是对4个基本的 FileXxx 流的增强。缓冲流的基本原理,是在创建流对象时,会创建一个内置的默认大小的缓冲区数组,通过缓冲区读写,减少系统IO次数,从而提高读写的效率。
按照数据类型分类:
字节缓冲流:BufferedInputStream,BufferedOutputStream
字符缓冲流:BufferedReader,BufferedWriter
2. 字节缓冲流java.io.BufferedOutputStream extends OutputStream:字节缓冲输出流
java.io.BufferedInputStream extends InputStream:字节缓冲输入流
BufferedOutputStream 构造方法:
BufferedOutputStream(OutputStream out); // 创建一个新的缓冲输出流,以将数据写入到指定的底层输出流。 BufferedOutputStream(OutputStream out, int size); // 创建一个新的缓冲输出流,以将具有指定缓冲区大小的数据写入指定的底层输出流。参数:
OutputStream out:字节输出流(可以传递FileOutputStream,缓冲流会增加一个缓冲区,提高FileOutputStream的写入效率)
int size:指定缓冲流内容缓冲区的大小,不指定默认BufferedInputStream 构造方法:
BufferedInputStream(InputStream in); // 创建一个BufferedInputStream 并保存其参数,即输入流in,以便将来使用。 BufferedInputStream(InputStream in, int size); // 创建具有指定缓冲区大小的BufferedInputStream并保存其参数,即输入流in,以便将来使用。参数:
InputStream in:字节输入流(可以传递FileInputStream,缓冲流会增加一个缓冲区,提高FileInputStream的读取效率)
int size:指定缓冲流内容缓冲区的大小,不指定默认2. 字符缓冲流
java.io.BufferedWriter extends Writer:字符缓冲输出流
java.io.BufferedReader extends Reader:字节缓冲输入流
BufferedWriter 构造方法:
BufferedWriter(Writer out); //创建一个使用默认大小输出缓冲区的缓冲字符输出流。 BufferedWriter(Writer out, int sz); //创建一个使用给定大小输出缓冲区的缓冲字符输出流。参数:
Writer out:字符输出流(可以传递FileWriter,缓冲流会增加一个缓冲区,提高FileWriter的写入效率)
int sz:指定缓冲区的大小,不写默认大小BufferedWriter 特有的成员方法:
void newline(); // 写入一个行分隔符。会根据不团的操作系统,获取不太的行分隔符。BufferedReader 构造方法:
BufferedReader (Reader in); //创建一个使用默认大小输出缓冲区的缓冲字符输入流。 BufferedReader (Reader in, int sz); //创建一个使用给定大小输出缓冲区的缓冲字符输入流。参数:
Reader in:字符输入流(可以传递FileReader,缓冲流会增加一个缓冲区,提高FileReader的读取效率)
int sz:指定缓冲区的大小,不写默认大小BufferedReader Writer 特有的成员方法:
String readLine(); 读取一个文本行。读取一行数据。注意:
行的终止符号:通过下列字符之一即可认为某行已终止:换行('n')、回车('r')或回车后直接跟着换行(rn)。返回值:
包含该行内容的字符串,不包含任何行终止符,如果已到达流末尾,则返回 null
二、转换流1. OutputStreamWriter
转换流 java.io.OutputStreamWriter extends Writer,是字符流通向字节流的桥梁。使用指定的字符集(charset)将字符编码为字节。它的字符集可以由名称指定,也可以接受平台的默认字符集。
OutputStreamWriter 构造方法:
OutputStreamWriter(OutputStream out); // 创建一个使用默认字符集的字符流 OutputStreamWriter(OutputStream out, String charserName); // 创建一个指定字符集的字符流。参数:
OutputStream out:字节输出流,可以用来写转换之后的字节到文件中。
String charsetName:指定的编码表名称,不区分大小写。不指定默认使用UTF-82. InputStreamReader
转换流 java.io.InputStreamReader extends Reader,是字节流通向字符流的桥梁。读取字节,并使用指定的字符集将其解码为字符。它的字符集可以由名称指定,也可以接受平台的默认字符集。
InputStreamReader(InputStream in); // 创建一个使用默认字符集的字符流。 InputStreamReader(InputStream in, String charserName); // 创建一个指定字符集的字符流。参数:
InputStream in:字节输入流,用来读取文件中保存的字节。
String charsetName:指定的编码表名称,不区分大小写。不指定默认使用UTF-8
三、序列化1. 概述:
java提供了一种对象序列化的机子。
2. ObjectOutputStream 对象的序列化流
java.io.ObjectOutputStream extends OutputStream,ObjectOutputStream 类,将java对象的原始数据类型写出到文件,实现对象的持久存储。
ObjectOutputStream 构造方法:
ObjectOutputStream(OutputStream out); // 创建写入指定 OutputStream 的ObjectOutputStream参数:
OutputStream out:字节输出流ObjectOutputStream 特有的成员方法:
public final void writeObject (Object obj); // 将指定的对象写出(写入 ObjectOutput)3. 序列化操作
一个对象要想序列化,必须满足两个条件:
1. 该类必须实现 java.io.Serializable 接口,Serializable是一个标记接口,不实现此接口的类将不会使任何状态序列化或反序列化,会抛出 NotSerializableException。
2. 该类的所有属性必须是可序列化的。如果有一个属性不需要可序列化的,则该属性必须注明是瞬时态的,使用 transient 关键字修饰。4. ObjectInputStream 对象的反序列化流
java.io.ObjectInputStream extends InputStream,ObjectInputStream 类,将之前使用ObjectOutputStream序列化的原始数据恢复为对象
ObjectInputStream 构造方法:
ObjectInputStream (InputStream in); // 创建从指定 InputStream 读取的ObjectInputStream参数:
InputStream in:字节输入流ObjectInputStream 特有的成员方法:
public final Object readObject (Object obj); // 从ObjectInputStream读取一个对象5. InvalidClassException 异常
当JVM序列化对象时,能找到class文件,但是class文件在序列化对象之后发生了修改,那么反序列化操作也会失败,抛出InvalidClassException 异常。每次修改类的定义,都会给class文件生成一个新的序列号。
声明:static final long serialVersionUID = 1L;
四、PrintStream 打印流java.io.PrintStream 为其他输出流添加了添加了功能,使它们能够方便的打印各种数据值表示形式。
PrintStream特点:
1. 只负责数据的输出,不负者数据的读取
2. 与其他输出流不同,PrintStream 永远不会抛出IOException
3. 特有的方法print、println构造方法:
PrintStream(File file):输出的目的地是一个文件
PrintStream(OutputStream out):输出的目的地是一个字节输出流
PrintStream(String fileName):输出的目的地是一个文件路径注意:
如果是继承自父类的write方法写数据,那么查看数据的时候会查询编码表 97 -> a
如果使用自己特有的方法print、println方法写数据,写的数据远洋数据 97 -> 97可以改变输出语句的目的地(打印流)
输出语句,默认在控制台输出
使用System.setOut方法改变输出语句的目的地改为参数中传递的打印流的目的地
static void setOut(PrintStream out)重新分配“标准”输出流



