java回顾之缓冲流、序列流、转换流

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) : 将指定的对象写出。

  • 被序列化的对象类型必须实现Serializable接口。

  • 被序列化之后,对象在windows中是无法查看的。因为windows中根本就没有“对象”这个概念,所以如果查看的话会是乱码。这不是问题。

3.3、ObjectInputStream类

构造方法:

public ObjectInputStream(InputStream in) : 创建一个指定的ObjectInputStream

public final Object readObject() : 读取一个对象。

3.4对象操作流的作用

作用就是可以写出各种对象类型!!!

3.5、对象操作流的小知识点

  • transient关键字

    • transient叫做是”瞬态“

    • 可以修饰成员变量,被修饰的变量不会被序列化。

    transient int age;
  • serialVersionUID问题

    • 默认情况下,每个类在修改之后会改变一个编号,如果序列化时和反序列化时类的编号不同,就会反序列化(读取)失败。

    • 解决办法:手动指定一个编号,编号就不会发生改变了。

    private static final long serialVersionUID = 464563563646L;
  • 序列化多个对象

    • 可以序列化多个对象,但是如果读取的时候,读的方法调用如果超出对象的个数,就会出现错误。

    • 解决办法:不要存储多个对象。

  • 那我要保存多个对象咋办呢???

    • 可以把多个对象放在集合中,序列化一个集合对象。

四、打印流

打印流的意思就是方便控制台打印输出。

其实我们之前输出语句print()和println()就是打印流的方法

构造方法:

public PrintStream(String fileName) : 使用指定的文件名创建一个新的打印流。

五、第三方工具包

commons-io包
1.记住第三方jar包使用步骤

2.理解commons-io这个包作用
提供了文件和文件夹复制的操作

原文地址:https://www.cnblogs.com/gushiye/p/13861115.html