Java后端开发day42--IO流(二)--字符集字符流
(以下内容全部来自上述课程)
拓展. try…catch异常处理(能看懂)
接口:AutoCloseable
特点:特定的情况下,可以自动释放资源
注意:只有实现了AutoCloseable接口的类,才能在小括号中创建对象。
1. 字符集
1.1 ASCII字符集(英文字母)
计算机在存储英文的时候只用一个字节就可以了。
- ASCII编码规则:前面补0,补齐8位
- ASCII解码规则:直接转成十进制
1.2 GBK(国标扩展)
windows系统默认使用的就是GBK。系统显示:ANSI
- GBK英文编码规则:不足8位,前面补0
- GBK汉字编码规则:不需要变动
- 规则1:汉字两个字节存储
- 规则2:高位字节二进制一定以1开头,转成十进制之后是一个负数
1.3 Unicode (万国码)
- UTF-16编码规则:用2~4个字节保存
- UTF-32编码规则:固定使用4个字节保存
- UTF-8编码规则:用1~4个字节保存
英文:一个字节
中文:三个字节且第一个字节首位是1
拓展:为什么会有乱码?
- 读取数据时未读完整个汉字
- 编码和解码方式不统一
1.4 编码和解码的方法
2. 字符流
字符流的底层就是字节流。
字符流 = 字节流 + 字符集
使用场景:对于纯文本文件进行读写操作。
2.1 字符输入流
一次读一个字节,遇到中文时,一次读多个字节。
FileReader
- 创建字符输入流对象
细节:如果文件不存在,就直接报错
- 读取数据
细节:
- 按字节进行读取,遇到中文,一次读多个字节,读取后解码,返回一个整数
- 读到文件末尾了,read方法返回-1
- 释放资源
read细节:
- 空参:
- 有参:
读取数据、解码、强转三步合并了,把强转之后的字符放到数组当中。
2.2 字符输出流
底层会把数据按照指定的编码方式进行编码,变成字节再写到文件中。
2.2.1 FileWriter构造方法
2.2.2 FileWriter书写细节
- 创建字符输出流对象
- 参数是字符串表示的路径或者File对象都是可以的
- 如果文件不存在会创建一个新的文件,但是要保证父级路径是存在的
- 如果文件已经存在,则会清空文件,如果不想清空可以打开续写开关
- 写数据
- 如果write方法的参数是整数,但是实际上写到本地文件中的是整数在字符集上对应的字符
- 释放资源
每次使用完流之后都要释放资源