栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java基础-缓冲流、转换流、序列化流

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java基础-缓冲流、转换流、序列化流

一、缓冲流

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-8

2. 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)重新分配“标准”输出流

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/288096.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号