java知识学习35-字符流(IO流)

一个中文:若是GBK编码,则占用两个字节;若是UTF-8编码,则占用三个字节;中文的第一个字节一般是负数的,所以通过字节数组读写中文时会自动根据不同编码适配,但通过字节读写时每次读取一个字节所以不能拼接为中文。如下图

字符流:为字节流+编码表。

  

  编码表: 

    

  字符集:

    

  ASCII字符集:当时主要用于欧美国家,所以后面为了适应中文字符,出现了GBXXX系列字符集。

    

  GBXXX字符集:

    

  Unicode字符集:为了适用各国各种语言编码,出现了Unicode可为任意语言的任意字符设计的一种统一标准。

    

字符串中的编码和解码:编码和解码必须是同一个字符集规则,否则会出现乱码。

  

字符流的编码和解码:编码和解码必须是同一个字符集规则,否则会出现乱码。

  字符流的抽象类:Reader(字符输入流的抽象类);Write(字符输出流的抽象类)。

  字符流的实现类: 

    InputStreamReader:是从字节流到字符流的桥梁,主要是读取字节,并用指定字符集解码为字符。每次可读取一个字符或一个字符数组。

    OutputStreamReader:是从字符流到字节流的桥梁,主要是写入字符,并用指定字符集编码为字节。每次可写入一个字符或一个字符数组。

  字符流写数据的5种方式:字符流写数据不会直接写到文件里还在缓冲区中,需通过flush方法进行刷新写入文件中。(由于close方法释放资源之前会执行刷新,所以有些情况不手动flush,但写入数据量较大时,一般习惯写一部分数据手动刷新一次,避免一次性写入大量数据效率好)

        

   字符流读数据的2种方式:

    

  字符流和字节流读写数据的区别:

    1、两种方式读写数据格式基本一样,字符流读写的是字符,字节流读写的是字节;

    2、字符流写文件时会先存放到缓冲区,所以不会直接写入文件,所以需要进行刷新流的动作写入文件,而字节流时直接操作写入文件的。

字符流读写简化子类:FileReader、FileWrite这两个分别继承于InputStreamReader和OutputStreamReader,主要就是为了简化写法的,但如果涉及到字符编码格式问题,仍需用他们的父类。

字符缓冲流:用于提高字符读写的效率。

  字符缓冲流写数据的三个步骤:1、写数据;2、调用换行符;3、调用刷新流方法。

  

  字符缓冲流特有功能:

    

IO流总结:

  字节流:

  

  字符流:

  

复制文件的异常处理:

  

原文地址:https://www.cnblogs.com/blogofzxf/p/14672511.html