java回顾之缓冲流、序列流、转换流
一、缓冲流
缓冲流也叫高效流,是对4个基本的file***流的增强。缓冲流的基本原理,实在创建对象时,会创建一个内置的默认大小的缓冲区数组,通过缓冲区读写,减少系统的IO次数,从而提高读写的效率
字节输出流
FileOutputStream ----> BufferedOutputStream
字节输入流
FileInputStream ----> BufferedInputStream
字符输出流
FileWriter ----> BufferedWriter
字符输入流
FileReader ----> BufferedReader
1.2、字节缓冲流
public BufferedInputStream(InputStream in) : 创建一个新的缓冲输入流。
public BufferedOutputStream(OutputStream out) : 创建一个新的缓冲输出流。
字节缓冲流就是为了提高效率,里面方法功能和之前普通字节流一模一样的。
1.3、字符缓冲流
public BufferedReader(Reader in) :创建一个新的缓冲输入流。
public BufferedWriter(Writer out) : 创建一个新的缓冲输出流。
普通流的方法,缓冲流也都有
缓冲流特有方法:
BufferedReader:
public String readLine() : 读一行文字。
BufferedWriter:
public void newLine() : 写一行换行,由系统属性定义符号
二、转换流
2.1、编码表介绍
2.2、输入转换流InputStreamReader类
构造方法:
InputStreamReader(InputStream in) : 创建一个使用默认字符集的字符流。 InputStreamReader(InputStream in, String charsetName) : 创建一个指定字符集的字符流
2.3、输出转换流OutputStreamWriter类
构造方法:
OutputStreamWriter(OutputStream in) : 创建一个使用默认字符集的字符流。 OutputStreamWriter(OutputStream in, String charsetName) : 创建一个指定字符集的字符流
转换流总结:
转换流的本质是一种字符流,可以调用字符流的方法
使用场景:
1.可以指定码表
2.可以把字节流转成字符流
3、序列流
java中提供了一种对象序列化的机制。用一个字节序列可以表示一个对象,该字节序列包含该对象的数据、对象的类型和对象中存储的属性等信息。字节序列写出的文件之后,相当于文件中持久保存了一个对象的信息。相反的,把文件中的对象读取回来叫反序列化。
就是说,java是生活在jvm当中的,在jvm当中有对象的概念,所以你可以创建对象、使用对象、存储对象,但是在系统中,无论是windows还是Linux都没有对象的概念,就要将对象分解成系统认识的东西,存起来,读取时再组合成对象
3.2 ObjectOutputStream类
叫做序列化流,也叫对象输出流
public ObjectOutputStream(OutputStream out) : 创建一个指定的ObjectOutputStream
public final void writeObject (Object obj) : 将指定的对象写出。
-
-
被序列化之后,对象在windows中是无法查看的。因为windows中根本就没有“对象”这个概念,所以如果查看的话会是乱码。这不是问题。
3.3、ObjectInputStream类
构造方法:
public ObjectInputStream(InputStream in) : 创建一个指定的ObjectInputStream
public final Object readObject() : 读取一个对象。
3.4对象操作流的作用
作用就是可以写出各种对象类型!!!
3.5、对象操作流的小知识点
-
-
transient叫做是”瞬态“
-
可以修饰成员变量,被修饰的变量不会被序列化。
transient int age;
-
-
serialVersionUID问题
-
默认情况下,每个类在修改之后会改变一个编号,如果序列化时和反序列化时类的编号不同,就会反序列化(读取)失败。
-
解决办法:手动指定一个编号,编号就不会发生改变了。
private static final long serialVersionUID = 464563563646L;
-
-
序列化多个对象
-
可以序列化多个对象,但是如果读取的时候,读的方法调用如果超出对象的个数,就会出现错误。
-
解决办法:不要存储多个对象。
-
-
那我要保存多个对象咋办呢???
-
可以把多个对象放在集合中,序列化一个集合对象。
-
四、打印流
打印流的意思就是方便控制台打印输出。
其实我们之前输出语句print()和println()就是打印流的方法
构造方法:
public PrintStream(String fileName) : 使用指定的文件名创建一个新的打印流。
五、第三方工具包
commons-io包
1.记住第三方jar包使用步骤
2.理解commons-io这个包作用
提供了文件和文件夹复制的操作