学习目标

  • 字符流
    • 字符流读写数据
    • 字符缓冲流
    • 字符缓冲流读写数据
  • 转换流
    • 字节流转换成字符流
  • 序列化流
    • 序列化与反序列化数据
  • 装饰设计模式
    • 装饰设计模式思想
    • 装饰设计模式代码
  • commons-io工具包
    • 第三方工具的使用步骤
    • commons-io常用API

      1. 字符流

      1.1 常见的编码表及特点 ?

      | 编码表 | 特点 | 注意 | | —- | —- | —- | | ASCII码表
      美国信息交换标准码表 | 包括了数字字符,英文大小写字符和一些常见的标点符号字符 | ASCII码表中无中文的。 | | GBK
      window系统默认的码表 | 兼容ASCII码表,也包含了21003个汉字,并支持繁体汉字以及部分日韩文字 |
      - GBK是中国的码表,一个中文以两个字节的形式存储。
      - 不包含世界上所有国家的文字。
      | | Unicode码表
      统一的万国码表 | 计算机科学领域里的一项业界标准,容纳世界上大多数国家的所有常见文字和符号 | Unicode是万国码表,以UTF-8编码后一个中文以三个字节的形式存储 |

重点:

  • windows默认使用码表为:GBK,一个中文占个字节。
  • idea和以后工作, 默认使用Unicode的UTF-8编解码格式,一个中文个字节。
  • 所有的编码表都兼容ASCII码表 , 所以数字 , 英文不会出现乱码问题

    1.2 字符流的组成 及字符流能解决什么问题 ?

  1. 字符流:字符流 = 字节流+ 编码表

11_JavaSE进阶-编码表,字符流 - 图1

  1. 可以解决字节流的乱码问题

    1.3 字符缓冲流如何使用 ? 能解决什么问题 ?

    字符缓冲流:
    BufferedWriter:可以将数据高效的写出
    BufferedReader:可以将数据高效的读入到内存
    构造方法:
    BufferedWriter(Writer out)
    BufferedReader(Reader in)
    字符缓冲流特有功能:
    BufferedWriter:
    void newLine():写一个行分隔符,会根据操作系统的不同,写入不同的行分隔符
    BufferedReader:
    public String readLine() :读取文件一行数据, 不包含换行符号 , 读到文件的末尾返回null
    注意 : 字符缓冲流不具备读写功能 , 只提供缓冲区 , 真正读写还是需要依赖于构造接收的基本的字符流

    1. BufferedReader br = new BufferedReader(new FileReader("day11_demo\\charstream.txt"));
    2. String line;
    3. while ((line=br.readLine())!=null){
    4. System.out.println(line);
    5. }

    1.4 对象流如何使用 ? 能解决什么问题 ?

  2. 对象操作输出流(对象序列化流) :就是将对象写到本地文件中,或者在网络中传输对象

  3. 对象操作输入流(对象反序列化流):把写到本地文件中的对象读到内存中,或者接收网络中传输的对象
  • 对象操作流特点 :可以把对象以字节的形式写到本地文件,直接打开文件,是读不懂的,需要再次用对象操作流读到内存中。
  • 注意:
    • 如果一个类对象想要被序列化 , 那么此类需要实现Serializable接口
    • Serializable接口的含义 :
      • 是一个标记性接口 , 里面没有任何抽象方法
      • 只要一个类实现了此接口 , 表示此类的对象可以被序列化

        1.5 转换流如何使用 ?

        image.png

        2.设计模式

        2.1 装饰者模式能解决什么问题?

        装饰者模式可在不改变现有对象结构的情况下动态地将责任附加到对象上。若要扩展功能,装饰者模式提供了比继承更有弹性的代替方案。

        2.2 装饰者模式使用原则 ?

        使用原则 :
        1. 装饰类和被装饰类需要有共同的父类型。
        2. 装饰类要传入被装饰类的对象
        3. 在装饰类中把要增强扩展的功能进行扩展
        4. 对于不要增强的功能直接调用

        3. 当日问题小结

        3.1 当日遇到的问题

        1.
        Sni17.png
        2.
        9.png

        3.2 出现问题原因

        1.字符输出流放置此处 所指向文件内容会被清空
        2.字符输出流 不能以整数方式输出

        3.3 解决问题方案

        1.挪到需要使用的位置
        2.改为字符方式输出