java 21 - 1 IO流中的字符流概述
字节流通过读取一个byte数组的方式可以读取中文的,但是有可能出现小问题,所以,读取中文最好是用字符流。
字符流:
字符流=字节流+编码表。
编码表:
由字符及其对应的数值组成的一张表
编码表介绍:
计算机只能识别二进制数据,早期由来是电信号。 为了方便应用计算机,让它可以识别各个国家的文字。 就将各个国家的文字用数字来表示,并一一对应,形成一张表。
ASCII:美国标准信息交换码。 用一个字节的7位可以表示。
ISO8859-1:拉丁码表。欧洲码表 用一个字节的8位表示。
GB2312:中国的中文编码表。
GBK:中国的中文编码表升级,融合了更多的中文文字符号。
GB18030:GBK的取代版本
BIG-5码 :通行于台湾、香港地区的一个繁体字编码方案,俗称“大五码”。
Unicode:国际标准码,融合了多种文字。 所有文字都用两个字节来表示,Java语言使用的就是unicode
UTF-8:最多用三个字节来表示一个字符。
UTF-8不同,它定义了一种“区间规则”,这种规则可以和ASCII编码保持最大程度的兼容:
它将Unicode编码为00000000-0000007F的字符,用单个字节来表示
它将Unicode编码为00000080-000007FF的字符用两个字节表示
它将Unicode编码为00000800-0000FFFF的字符用3字节表示
我们常用的是GBK和UTF-8。
既然有编码,那么就有解码,那么,编码和解码都是什么呢?
编码:把看得懂的变成看不懂的
String ------- byte[]
解码:把看不懂的变成看不懂的
byte[] ------- String
最经典的例子就是抗日神剧里面的电报,滴滴滴响个不停的那个
其实在神剧里面,电报员手上的小本子就是编码表。里面记录着字符和所对应的数值
编码过程(发电报):发“你”这个字,步骤:
你 --- 对应的数值 ---- 二进制 ----发送
解码过程(读电报):
接收 --- 二进制 --- 十进制 --- 数值 --- 找到“你”
注意:编码解码的格式必须一致的,就是必须使用的是同一种编码表,否则牛头不对马嘴