缓冲流,转换流,序列化流

缓冲流

概述:高效流,对四个基本流的增强,以Buffered开头。在创建流对象时,会创建一个内置的缓冲区数组来进行一次读写,以减少IO次数。

构造方法

  • BufferedInputStream(InputStream in)
    创建一个缓冲输入流并保存其参数,即输入流 in。可使用父类成员方法如read。

  • BufferedOutputStream(OutputStream out, int size)
    创建一个新的缓冲输出流,以将具有指定缓冲区大小的数据写入指定的底层输出流。

    使用步骤:

    • 创建输出流对象,构造方法中传入目的地址。
    • 创建缓冲输出流对象,构造方法参数为上面的输出流对象。一般大小用默认。
    • 调用write方法将数据写入到内部缓冲区。
    • 调用close释放资源(默认关闭前刷新),只关闭缓冲流即可。
字符缓冲流
  • BufferedReader(Reader in)

    String readLine() 读取一个文本行。 标识符为换行 (’\n’)、回车 (’\r’) 或回车后直接跟着换行,返回包含该行内容的字符串,不包含任何行终止符,如果已到达流末尾,则返回 null。

  • BufferedWriter(Writer out)

    void newLine() 写入一个系统对应的行分隔符。


转换流

概述:编码是将字符转换为字节,解码相反。字符集Charset也叫编码表,是一个系统支持的所有字符的集合。GBK为最常用的国标中文编码表一个字符对应2字节,Unicode为统一码,其中UTF-8中文字节对应3字节。

  • OutputStreamWriter输出转换流
    • 概述:字符流通向字节流的桥梁,可使用指定的 charset 将要写入流中的字符编码成字节。它使用的字符集可以由名称指定或显式给定,否则将接受平台默认的字符集。(idea中为UTF-8)

    • 构造方法:

      OutputStreamWriter(OutputStream out, String charsetName)
      创建使用指定字符集的 OutputStreamWriter,传递参数为字节输出流和编码表名称(不区分大小写),再调用write方法实现将字符写入为字节即可。

  • InputStreamReader输入转换流
    • 概述:字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。

    • 构造方法:

      InputStreamReader(InputStream in, String charsetName)
      创建使用指定字符集的 InputStreamReader。参数中传入的编码表要和输入流文件的编码方式相同,否则发生乱码。


序列化流

概述:ObjectOutputStream将 Java 对象的基本数据类型和图形写入 OutputStream。可以使用 ObjectInputStream读取(重构)对象。通过在流中使用文件可以实现对象的持久存储。

  • ObjectOutputStream(OutputStream out)
    创建写入指定 OutputStream 的 ObjectOutputStream。只能将实现java.io.Serializable接口的对象写入流中。

    void writeObject(Object obj)
    将指定的对象写入 ObjectOutputStream。

  • ObjectInputStream(InputStream in)
    创建从指定 InputStream 读取的 ObjectInputStream。使用前提为实现Serializable接口和类的.class文件存在,否则抛出类找不到异常。

    Object readObject()
    从 ObjectInputStream 读取对象。

tips:

  1. transient关键字修饰的成员变量不能被序列化,会变为默认值。
  2. 在类实现Serializable接口时会为其class文件添加一个序列号,在序列化时也会对其txt文件标记同样的序列号,反序列化时会比较两者,不同则抛出InvalidClassException异常(如对该类进行修改后直接反序列化)。避免该情况的做法是为该类显式声明其自己的 serialVersionUID,如:static final long serialVersionUID = 42L;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值