一个中文:若是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