JAVA-基础(缓冲流-转换流-序列化流)

JAVA-基础(缓冲流-转换流-序列化流)

1.缓冲流?

缓冲流,也叫高效流,是对4个基本的FileXxx 流的增强,所以也是4个流

字节缓冲流BufferedInputStreamBufferedOutputStream

字符缓冲流BufferedReaderBufferedWriter

2.原理?

在创建流对象时,会创建一个内置的默认大小的缓冲区数组,通过缓冲区读写,减少系统IO次数,从而提高读写的效率。

复制一个300M的文件,普通io流可能速度在20分钟以上,缓冲流只需要几百毫秒。

3.构造方法?

public BufferedInputStream(InputStream in) :创建一个 新的缓冲输入流。

public BufferedOutputStream(OutputStream out): 创建一个新的缓冲输出流。

public BufferedReader(Reader in) :创建一个 新的缓冲输入流。

public BufferedWriter(Writer out): 创建一个新的缓冲输出流。

4.方法?

BufferedReader:public String readLine(): 读一行文字。

BufferedWriter:public void newLine(): 写一行行分隔符,由系统属性定义符号。

5.转换流?

按照某种规则,将字符存储到计算机中,称为编码

存储在计算机中的二进制数按照某种规则解析显示出来,称为解码

在IDEA中,使用FileReader 读取项目中的文本文件。由于IDEA的设置,都是默认的UTF-8编码,所以没有任何问题。但是,当读取Windows系统中创建的文本文件时,由于Windows系统的默认是GBK编码,就会出现乱码。

6.InputStreamReader?

是Reader的子类,是从字节流到字符流的桥梁。它读取字节,并使用指定的字符集将其解码为字符。

7.构造方法?

InputStreamReader(InputStream in): 创建一个使用默认字符集的字符流。

InputStreamReader(InputStream in, String charsetName): 创建一个指定字符集的字符流。

8.OutputStreamWriter?

转换流java.io.OutputStreamWriter ,是Writer的子类,是从字符流到字节流的桥梁。使用指定的字符集将字符编码为字节.

9.构造方法?

OutputStreamWriter(OutputStream in): 创建一个使用默认字符集的字符流。

OutputStreamWriter(OutputStream in, String charsetName): 创建一个指定字符集的字符流。

10.序列化?

Java 提供了一种对象序列化的机制。用一个字节序列可以表示一个对象,该字节序列包含该对象的数据对象的类型对象中存储的属性等信息。字节序列写出到文件之后,相当于文件中持久保存了一个对象的信息。

反之,该字节序列还可以从文件中读取回来,重构对象,对它进行反序列化对象的数据对象的类型对象中存储的数据信息,都可以用来在内存中创建对象

11.ObjectOutputStream?

java.io.ObjectOutputStream 类,将Java对象的原始数据类型写出到文件,实现对象的持久存储。

12.构造方法?

public ObjectOutputStream(OutputStream out): 创建一个指定OutputStream的ObjectOutputStream。

一个对象要想序列化,必须满足两个条件:

1该类必须实现java.io.Serializable 接口,Serializable 是一个标记接口,不实现此接口的类将不会使任何状态序列化或反序列化,会抛出NotSerializableException

2该类的所有属性必须是可序列化的。如果有一个属性不需要可序列化的,则该属性必须注明是瞬态的,使用transient 关键字修饰。

public final void writeObject (Object obj) : 将指定的对象写出。

13.ObjectInputStream?

ObjectInputStream反序列化流,将之前使用ObjectOutputStream序列化的原始数据恢复为对象。

14.构造方法?

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

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

对于JVM可以反序列化对象,它必须是能够找到class文件的类。如果找不到该类的class文件,则抛出一个 ClassNotFoundException 异常。

猜你喜欢

转载自www.cnblogs.com/fan123yh/p/11029654.html