字符流与文件IO,哪个更擅长处理?

摘要:导入: 字符集:ASCII码表,GBK,Unicode万国码、 ASCII码表中只有英文 GBK能够兼容ASCII码表,内部包含了大部分中文、中文用1开头,保存为两个字节 Unicode万国码,包含大部分国家的大部分文字 utf-8编码规则
导入: 字符集:ASCII码表,GBK,Unicode万国码、 ASCII码表中只有英文 GBK能够兼容ASCII码表,内部包含了大部分中文、中文用1开头,保存为两个字节 Unicode万国码,包含大部分国家的大部分文字 utf-8编码规则(用1~4个字节编码)不是编码表!! 其中英文依然用一个字节进行编码,中文用三个字节:1110xxxx 10xxxxxx 10xxxxxx这个格式进行编码 出现乱码原因: 中文字节没有读全:如果我一个字节一个字节读取,自然无法解码成中文 编码规则和解码规则不一致,从上面其实我们就可以看出,编码方式连读取字节数都不同,故如果编码和解码不一致,就更不可能解码成功 为了解决第二个问题,str.getBytes("GBK");和new String(bytes,"GBK")进行标注编码解码方式,来保证编码和解码方式的相同 第二个问题解决后,为了解决第一个问题,我们就可以用字符型io流,可以智能识别是中文还是英文,然后读取对应字节的数据 FileRead 创建对象并关联本地文件 和字符型类似,可以传递地址字符串 读取数据read() 无参方法 read默认默认也是一个一个进行读取,当读取到中文时,会进行多字节读取 读取完成后,read会返回一个十进制数字 如果想要显示文字,需要char进行强转 有参 int len =fl.read(chars) 其中chars是char类型的数组,和字符型相似。这个方法其实也就是先取数据,解码,强制类型转换,存储在数组 关闭流