zoukankan      html  css  js  c++  java
  • 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这个包作用
    提供了文件和文件夹复制的操作

  • 相关阅读:
    【BZOJ2287】消失之物
    【NOI2001】炮兵阵地
    【SCOI2005】互不侵犯
    【USACO2007 nov glod】玉米田
    【NOIP模拟】航班
    【NOIP模拟】闲荡
    【NOIP模拟】军队调遣
    树形地铁系统
    矩阵
    完美的集合(题解)
  • 原文地址:https://www.cnblogs.com/gushiye/p/13861115.html
Copyright © 2011-2022 走看看