1、缓冲流概念
访问硬盘时间资源开销大;
缓冲流自带缓冲区域;
缓冲区域减少硬盘访问次数,提高读取文件效率。
2、字节缓冲流
字节缓冲输入
/
输出流:
BufferedInputStream/BufferedOutputStream
继承于FilterInputStream/FilterOutputStream类
FilterInputStream/FilterOutputStream继承于InputStream/OutputStream抽象基类
BufferedInputStream/BufferedOutputStream的作用就是为“输入/输出字节流提供缓冲功能”
BufferedInputStream/BufferedOutputStream没有声明自己任何新的方法,它只是覆盖了基类方法
缓冲输入流每次读入和写出操作都是对缓冲区域执行的,而不是直接操作硬盘文件
注意:缓存流属于包装流,只能对已有的流进行封装,不能直接关联文件进行操作
3、字符缓冲流
符缓冲输入/输出流:
BufferedReader/BufferedWriter
继承于Reader/Writer抽象基类
BufferedReader/BufferedWriter的作用就是为“输入/输出字符流提供缓冲功能”
BufferedReader/BufferedWriter没有声明自己任何新的方法,它只是覆盖了基类方法
(方法与FileRead/FileWriter方法基本类是,新增方法:readLine/newLine 读取一行数据(以换行为结束标记)/写入一个行分隔符)
4、数据输入输出流
数据输入输出流概念
文件流和缓冲流仅仅支持简单的字节写入写出,支持的读入写出方法局限性比较大
数据流允许应用程序以适当方式将数据以Java基本数据类型写入和读出文件
数据流提供了比文件流和缓冲流更加丰富的读入写出操作
由于数据流底层依然是字节操作,所以数据流为字节流类型的拓展包装流
数据输出流拓展方法:
数据输入流的拓展方法:
5、对象流
对象流概念
所谓对象流就是将对象进行流化后通过流传输,我们可以直接将流化后的对象进行文件读写操作
对象流化就是将java对象转化为字节序列
需要进行对象流传输的对象所关联的类必须序列化
序列化:1)需要序列化的类必须实现Serializable接口
2)Serializable接口没有抽象方法,只是标注该对象可以被序列化
3)没有实现Serializable接口类的对象是不能通过对象流传输的
对象流基本操作
对象输出流(ObjectOutputStream):writeObjct(Object obj)方法可以对参数指定的obj对象进行序列化成字节,
并把得到的字节写到输出流关联的终端(可以是文件或者是网络的URI)
对象输入流(ObjectInputStream):readObject()方法从一个终端(可以是文件或者网络URI)读取一个字节序列,
再对当前字节序列进行反序列化为一个对象,并将当前对象返回