123-转换流的原理-InputStreamReader-OutputStreamWriter

1编码引出的问题 --FileReader读取GBK格式的文件    会乱码 相当于ide默认的utf-8读取GBK编码的汉字  表示的字节不同会报错

FileReader可以读取IDE默认编码格式UTF-8的文件,
但是FileReader读取系统默认编码(中文系统默认GBK格式)会产生乱码
package demo01;

import java.io.FileReader;
import java.io.IOException;

/*
FileReader可以读取IDE默认编码格式UTF-8的文件,
但是FileReader读取系统默认编码(中文系统默认GBK格式)会产生乱码
 */
public class Demo01FileReader {
    public static void main(String[] args) throws IOException {
    FileReader fr = new FileReader("D:\\IdeaProjects\\新建文件夹\\GBK格式的文本.txt");
    int len = 0;
    char[] chars = new char[1024];
    while((len=fr.read(chars))!=-1){
        System.out.println(new String(chars));
    }
    fr.close();
   }
}

   2.转换流的原理

注意:

FileReader

1.其实所有的底层都是FileInputStream来读的,先读取到字节 再FileReader(这个时候用的UTF-8来解码的来read的)把字节转换为字符(相当于解码) 

但是如果存储的是GBK格式,则FileInputStream读取的字节时Gbk格式 但是FileReader仍然用UTF-8来,则会产生乱码(编码和解码不对应,会乱码所以FileReader只能读取ide默认格式编码的文件)

不用FileReader读了用InputStreamReader来读既可以查询默认的UTF-8又可以查询指定的码表比如GBK或者其他的

2.FileWriter

只能查询Ide的默认码表,吧字符转换为字节(编码把看懂的转换成看不懂的)还是会用到FileOutputStream依次把字节写入到硬盘中(只能写Utf-8)

如果要写GBK格式的文件

用OutputStreamWriter 既可以把字符转化为默认的又可以转化为指定的码表 ,然后FileOutputStream写入到硬盘中(注意FileOutputStream只能写UTF-8)

                                              

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值