A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© KevinJavaEE 初级黑马   /  2019-3-28 13:37  /  686 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

## 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编码集的字节,字符流读取时,会默认将其按照其编码集格式进行组合。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马