## 1. IO流分类
字节流:InputStream,OutputStream
字符流:Reader,Writer
1个中文
gbk:2个字节
utf-8:3个字节
字符集主要涉及两个方面:
1.文件本身的字符集。
2.程序中编码解码时使用的字符集。
当两者的字符集格式不一致时,就会出现乱码的情况。本质上字节流和字符流都可以读取/写入中英文,前提是字符集格式一致。
## 2. IO流的读取/写入的默认编码集格式
2.1 默认的读取/写入编码格式为:系统编码集格式。中文系统默认为GBK,与JAVA文件的编码格式无关。
读取/写入的编码格式可更改,这里只介绍IDEA的设置方法。见下图:
![d06ac7ccf9e51a27958ea3653a8b928c.png](en-resource://database/403:1)
2.2 由于java文本的编码集格式,当获取数据时,可能出现获取不到的状况。
这是因为,如果java文本的编码集格式,同IO流读取/写入路径的文件编码不一致时,将无法在路径下中的文件匹配到java文本中想要获取的键。
## 3. 关于Properties对象的load和store方法
3.1 load和store方法为什么明确规定:
```
3.1.1.情况一,读取数据(load),如果路径下的文件中存在中文,必须使用字符输入流?
```
```
3.1.2.情况二,写入数据(store),properties容器中含有中文字符,写入时必须使用字符输出流?
```
分析:
1.因为字节流和字符流,在读取或写入时,本质上来讲,是读取不同编码格式下的字符或字节所表示的整数值(编码集只是起一个标识作用),在不同的编码集下,整数值所表示的字符是不相同的(英文除外)。
2.如果编码解码时,采用了不同的编码集,这就会导致整数值在不同的编码集下有不同的字符表示。
3.Properties中当读取/写入字节流时,默认采用的是ISO-8859-1的编码集,这可能会同我们IO流的编码格式产生冲突。而当读取/写入为字符流时,Properties不会对传入的字符流进行编码的转换,也就是说默认使用字符流的编码格式。
## 4. 关于字符流不能读取二进制文件的分析
二进制文件:音频,程序文件,视频文件等。
字符流读取二进制文件时,会采用编码集的方式进行读取,这将会导致乱码的情况。
因为二进制文件是ASCII编码集的字节,字符流读取时,会默认将其按照其编码集格式进行组合。 |
|