Loading

File与IO流之字符流

导入:

字符集:ASCII码表,GBK,Unicode万国码、

  1. ASCII码表中只有英文
  2. GBK能够兼容ASCII码表,内部包含了大部分中文、中文用1开头,保存为两个字节
  3. Unicode万国码,包含大部分国家的大部分文字

utf-8编码规则(用1~4个字节编码)不是编码表!!

其中英文依然用一个字节进行编码,中文用三个字节:1110xxxx 10xxxxxx 10xxxxxx这个格式进行编码

出现乱码原因:

  1. 中文字节没有读全:如果我一个字节一个字节读取,自然无法解码成中文
  2. 编码规则和解码规则不一致,从上面其实我们就可以看出,编码方式连读取字节数都不同,故如果编码和解码不一致,就更不可能解码成功

为了解决第二个问题,str.getBytes("GBK");new String(bytes,"GBK")进行标注编码解码方式,来保证编码和解码方式的相同

第二个问题解决后,为了解决第一个问题,我们就可以用字符型io流,可以智能识别是中文还是英文,然后读取对应字节的数据

FileRead

  1. 创建对象并关联本地文件
  • 和字符型类似,可以传递地址字符串
  1. 读取数据read()

无参方法

  • read默认默认也是一个一个进行读取,当读取到中文时,会进行多字节读取
  • 读取完成后,read会返回一个十进制数字
  • 如果想要显示文字,需要char进行强转

有参

  • int len =fl.read(chars) 其中chars是char类型的数组,和字符型相似。这个方法其实也就是先取数据,解码,强制类型转换,存储在数组
  1. 关闭流
posted @ 2025-05-28 16:27  huidu01  阅读(13)  评论(0)    收藏  举报
; ;