美文网首页java复习
2020-07-03字符流

2020-07-03字符流

作者: 智障猿 | 来源:发表于2020-07-04 15:11 被阅读0次
    • 为什么会出现字符流?
      由于字节流操作中文不是特别的方便,所以Java就提供了字符流(字符流 = 字节流+编码表)
    • 用字节流复制文本文件时,文本文件也有中文,但是没有问题,原因是最终底层会自动进行字节拼接成中文(汉字在存储的时候,无论选择哪种编码存储,第一个字节都是负数)

    字符串中的编码解码问题

    • 编码:
      ①byte[] getBytes();使用平台默认字符集将string编码为一系列字节,将结果存储到新的字节数组中。
      ②byte[] getBytes(String charsetName):使用指定的字符集将该String编码为一系列字节,将结果存储到新的字节数组中。
    • 解码:
      ①String(byte[] bytes):使用平台默认的字符集解码指定的字节数组来构造新的String。
      ②String(byte[] bytes,String charsetName):使用指定的字符集解码指定的字节数组来构造新的String。

    字符流中编码解码的问题

    • 字符流抽象基类
      ①Reader:字符输入流的抽象类
      ②Writer:字符输出流的抽象类
    • 字符流中和编码解码问题相关的两个类
      ①InputStreamReader:是从字节流到字符流的桥梁,它读取字节,并使用指定的编码将其解码为字符。它使用的字符集可以由名称指定,也可以被明确指定,或者可以接受平台的默认字符集。
      ②OutputStreamWriter:是从字节流到字符流的桥梁,使用指定的编码将写入的字符编码为字节,它使用的字符集可以由名称指定,也可以被明确指定,或者可以接受平台的默认字符集
    • InputStreamReader构造方法
    构造方法 说明
    InputStreamReader(InputStream in) 创建一个使用默认字符集的inputStreamReader
    inputStreamReader(InputStream in,String charsetName) 创建一个使用命名字符集的InputStreamReader
    • OutputStreamWriter构造方法
    构造方法 说明
    OutputStreamWriter(OutputStream in) 创建一个使用默认字符集的OutputStreamWriter
    OutputStreamWriter(OutputStream in,String charsetName) 创建一个使用命名字符集的OutputStreamWriter

    字符流写数据的5种方式

    方法名 说明
    void write(int c) 写一个字符
    void write(char[] chuf) 写入一个字符数组
    void write(char[] chuf,int off,int len) 写入字符数组的一部分
    void write(String str) 写一个字符串
    void write(String str,int off,int len) 写一个字符串的一部分
    • flush与close方法
    方法名 说明
    flush() 刷新流,还可以继续写数据
    close() 关闭流,释放资源,但是在关闭之前会先刷新流,一旦关闭,就不能再写数据了

    字符流读数据的2种方式

    方法名 说明
    int read() 一次读一个字符数据
    int read(char[] chuf) 一次读一个字符数组的数据

    FileReader与FileWriter(InputStreamReader和OutputStreamWriter的子类)

    由于InputStreamReader和OutputStreamWriter使用起来名字太长,且构造方法还要创建一个FileInputStream和FileOutputStream对象,不够方便,所以使用FileReader和FileWriter,但是想要设置编码解码时,还是使用InputStreamReader和OutputStreamWriter

    构造方法 说明
    FileReader(String fileName) 等价于InputStreamReader(new FileInputStream(String filename))
    FileWriter(String fileName) 等价于OutputStreamReader(new FileOutputStream(String filename))

    相关文章

      网友评论

        本文标题:2020-07-03字符流

        本文链接:https://www.haomeiwen.com/subject/wfqeqktx.html