主要内容

  • 转换流
  • 缓冲流
  • 序列化流
  • 打印流

1 缓冲流

提高IO流读写效率

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

  • 字节缓冲流: BufferedInputStream , BufferedOutputStream
  • 字符缓冲流: BufferedReader , BufferedWriter
    流对象使用规则:晚开早关

1.1 字节缓冲流

public BufferedInputStream(InputStream in)创建缓冲输入流
public BufferedOutputStream(OutputStream out)创建缓冲输出流

1.2 字符缓冲流

构造方法

public BufferedReader(Reader in)创建缓冲输入流
public BufferedWriter(Writer out)创建缓冲输出流

特有方法

BufferedReader:public String readLine():
读一行字符串,没有返回null,不会读取回车换行符
BufferedWriter:public void newLine():
换行,可跨平台

2 转换流

字符编码:

  • 编码:字符按照制定规则转换字节
  • 解码:字节按照指定规则转换字符

字符集(编码表)

  • ASCII: 所有码表都囊括了ASCII
  • IOS-8859-1:拉丁码表 ,没中文
  • GBK:国际标准转换码 (Windows默认)
  • UTF-8:万国码 (IDEA默认)

2.1InputStreamReader类

字节流到字符流的桥梁

构造方法

InputStreamReader(InputStream in)
创建一个默认编码字符流
InputStreamReader(InputStream in,String CharsteName)
创建一个指定编码格式的字符流

2.2 OutputStreamWriter类

字符流到字节流的桥梁

构造方法

OutputStreamWriter(OutputStream in)
创建一个默认编码字符流
OutputStreamWriter(OutputStream in,String CharsteName)
创建一个指定编码格式的字符流

3 序列化

day10【缓冲流、转换流、序列化流】

3.1ObjectoutputStream类

保存java对象到文件中(序列化)

构造方法

public ObjectOutputStream(OutputStream out)
创建指定OutputStream的ObjectOutputStream

序列化操作

一个类序列化必须满足两个条件:

  • 必须实现java.io.Serializable接口,Serializable是一个标记接口。
  • 该类的所有属性必须是可序列化的。如果有一个属性不需要序列化,则该属性必须注明是瞬态的,使用transient 关键字修饰。

3.2 ObjectInputStream类

将之前使用ObjectOuttputStream序列化的数据恢复为对象(反序列化)

构造方法

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

反序列化操作1

public final Object readObject()
读取一个对象,找不到该类class文件,则抛出`ClassNotFoundException` 异常。 

反序列化操作2

有class文件,但是class文件在序列化对象之后发生了修改,则抛出InvalidClassException 异常
原因:
1.该类的序列版本号与从流中读取的类描述符的版本号不匹配
2.该类包含位置数据类型
3.该类没有可以访问的无参数构造方法

序列化集合

如果要持久存储多个对象,存入集合直接存储List集合。
读取的时候可以确定对象的数量,避免了EOFException异常

4 打印流

4.1PrintStream类

注意事项

  • 流操作数据目的,不操作数据源
    只能输出不能读取

构造方法

public printStream(String fileName)
使用指定的文件名创建打印流

改变打印流向

System.out获取的就是一个标准输出流,默认指向控制台

相关文章: