十四、缓冲流

缓冲流

  • 缓冲流概述

    • 缓冲流也成为高效流、或者高级流。之前学习的字节流可以称为原始流

    • 作用:缓冲流自带缓冲区、可以提高原始字节流、字符流读写数据的性能

  • 字节缓冲流

    • 性能优化原理:

      • 字节缓冲输入流自带了8KB缓冲池,以后我们直接从缓冲池读取数据,所以性能较好

      • 字节缓冲输出流自带了8KB缓冲池,数据直接写入到缓冲池中去,写数据性能极高了

    • 构造器说明
      public BufferedInputStream(InputStream is) 可以把低级的字节输入流包装成一个高级的缓冲字节输入流管道,从而提高字节输入流读数据的性能
      public BUfferedOutputStream(OutputStream os) 可以把低级的字节输出流包装成一个高级的缓冲字节输出流,从而提高写数据的性能

       

  • 字节缓冲流的性能分析

    • io-app2.src.com.itheima.d2eff_byte_buffer_time.ByteBufferTimeDemo

  • 字符缓冲流

    • 字符缓冲输入流:BufferedReader

      • 作用:提高字符输入流读取数据的性能,除此之外多了按照行读取数据的功能

      • 构造器说明
        public BufferedReader(Reader r) 可以把低级的字符输入流包装成一个高级的缓冲字符输入流管道,从而提高字符输入流读数据的功能
    • 字符缓冲输入流新增功能

      • 方法说明
        public String readLine() 读取一行数据返回,如果读取没有完毕,五行可读返回null
    • 字符缓冲输出流:BufferedWriter

      • 作用:提高字符输出流写取数据的性能,除此之外多了换行功能

      • 构造器说明
        public BufferedWriter(Writer w) 可以把低级的字符输出流包装成一个高级的缓冲字符输出流管道,从而提高输出流写数据的性能
      • 方法

      • 方法说明
        public void newLine() 换行操作
    • 经典代码:io-app2.src.com.itheima.d3_char_buffer.BufferedCharTest3

转换流

  • 问题引出:不同编码读取乱码问题

    • io-app2.src.com.itheima.d4_transfer_stream.CharSetTest1

  • 字符输入转换流

    • 字符输入转换流:InputStreamReader,可以把原始的字节流按照指定编码转换成字符输入流

      • 构造器说明
        public InputStreamReader(InputStream is) 可以把原始的字节流按照代码默认编码转换成字符输入流。几乎不用,与默认的FileReader一样
        public InputStreamReader(InputStream is,String charset) 可以把原始的字节流按照指定编码转换成字符输入流,这样字符流中的字符就不乱码了(重点)

         

  • 字符输出转换流

    • 字符输出转换流:OutputStreamWriter,可以把字节输出流按照指定编码转换成字符输出流

      • 构造器说明
        public OutputStreamWriter(OutputStream os) 可以把原始的字节输出流按照代码默认编码转换成字符输出流。几乎不用
        public OutputStreamWriter(OutputStream os,String charset) 可以把原始的字节输出流按照指定编码转换成字符输出流(重点)

         

序列化对象

  • 对象序列化

    • 作用:以内存为基准,把内存中的对象存储到磁盘文件中去,称为对象序列化

    • 使用到的流时对象字节输出流:ObjectOutputStream

      • 构造器说明
        public ObjectOutputStream(OutputStream out) 把低级字节输出流包装成高级的对象字节输出流
    • ObjectOutputStream序列化方法

      • 方法名称说明
        public final void writeObject(Object obj) 把对象写出去到序列化流的文件中去

         

  • 对象反序列化

    • 使用到的流是对象字节输入流:ObjectInputStream

    • 作用:以内存为基准,把存储到磁盘文件中去的对象数据恢复成内存中的对象,称为反序列化

      • 构造器说明
        public ObjectInputStream(InputStream out) 把低级字节输入流包装成高级的对象字节输入流
    • ObjcetInputStream序列化方法

      • 方法名称说明
        public Object readObject() 把存储到磁盘文件中去的对象恢复成内存中的对象返回
    • 序列化的版本号与反序列化的版本号必须一致才不会出错

    • serialVersionUID: 申明序列化的版本号码

    • 对象如果要序列化,必须实现Serializable序列化接口

打印流

  • PrintStream、PrintWriter

    • 作用:打印流可以实现方便、高效的的打印数据到文件中去。打印流一般是指:PrintStream、PrintWriter两个类

    • 可以实现打印什么数据就是什么数据

    • PrintStream

      • 构造器说明
        public PrintStream(OutputStream os) 打印流直接通向字节输出流管道
        public PrintStream(File f) 打印流直接通向文件对象
        public PrintStream(String filepath) 打印流直接通向文件路径
      • 方法

      • 方法说明
        public void print(Xxx xx) 打印任意类型的数据出去
    • PrintWriter

      • 构造器说明
        public PrintWriter(OutputStream os) 打印流直接通向字节输出流管道
        public PrintWriter(Writer w) 打印流直接通向字符输出流管道
        public PrintWriter(File f) 打印流直接通向文件对象
        public PrintWriter(Strint filepath) 打印流直接通向文件路径
      • 方法

      • 方法说明
        pubilc void print(Xxx xx) 打印任意类型的数据出去
    • PrintStream和PrintWriter的区别

      • 打印数据功能是一模一样的,都是使用方便,性能高效(核心优势)

      • PrintStream继承自字节输出流OutputStream,支持写字节数据的方法

      • PrintWrier继承自字符输出流Writer,支持写字符数据出去

  • 输出语句的重定向

    • 属于打印流的一种应用,可以把输出语句的打印位置改到文件

properties

  • Properties属性集对象

    • 其实就是一个Map集合,但是我们一般不会当集合去使用,因为HashMap更好用

  • Properties核心作用:

    • Properties代表的是一个属性文件,可以把自己对象中的键值对信息存入到一个属性文件中去

    • 属性文件:后缀是 .properties结尾的文件,里面的内容都是key = value,后续做系统配置信息的

  • Properties和IO流结合的方法:

    • 构造器说明
      void load(InputStream inStream) 从输入字节流读取属性列表(键和元素对)
      void load(Reader reader) 从输入字符流读取属性列表(键和元素对)
      void store(OutputStream out, String comments) 将此属性列表(键和元素对)写入此Properties表中,以适合于使用load(InputStream)方法的格式写入输出字节流
      void store(Writer writer, String comments) 将此属性列表(键和元素对)写入此Properties表中,以适合使用load(Reader)方法的格式写入输出字符流
      public Object setProperty(String key,String value) 保存键值对(put)
      public String getProperty(String key) 使用此属性列表中指定的键搜索属性值(get)
      public Set<String> stringPropertyNames() 所有键的名称的集合(keySet())

IO框架

  • commons-io概述

    • commons-io是apache开源基金组织提供的一组有关IO操作的类库,可以提高IO功能开发的效率

    • commons-io工具包提供了很多有关io操作的类。有两个主要的类FileUtils,IOUtils

  • FileUtile主要有如下方法:

    • 方法名说明
      String readFileToString(File file,String encodind) 读取文件中的数据,返回字符串
      void copyFile(File srcFile,File destFile) 复制文件
      void copyDirectoryToDirectory(File srcDir,File destDir) 复制文件夹

       

posted @ 2022-06-16 16:41  遨游JAVA的大叔  阅读(62)  评论(0)    收藏  举报