暑期JAVA学习(26)转换流

(一)问题引出:不同编码读取乱码问题

(1)使用字符流读取中文是否有乱码?

●没有的,因为代码编码和文件编码都是UTF-8。

(2)如果代码编码和文件编码不一致,使用字符流直接读取还能不乱码吗?

●会乱码
●文件编码和读取的编码必须一致才不会乱码。

(二)字符输入转换流

(1)引入

①如果代码编码和文件编码不一致,使用字符流直接读取还能不乱码吗?

●会乱码

②如何解决呢?

●使用字符输入转换流
●可以提取文件(GBK)的原始字节流,原始字节不会存在问题。
●然后把字节流以指定编码转换成字符输入流,这样字符输入流中的字符就不乱码了

(2)字符输入转换流简述

在这里插入图片描述
●字符输入转换流:InputStreamReader,可以把原始的字节流按照指定编码转换成字符输入流

构造器说明
public InputStreamReader(InputStream is)可以把原始的字节流按照代码默认编码转换成字符输入流。几乎不用,与默认的FileReader一样
public InputStreamReader(InputStream is ,String charset)可以把原始的字节流按照指定编码转换成字符输入流,这样字符流中的字符就不乱码了(重点)

(3)字符输入转换流InputStreamReader作用

●可以解决字符流读取不同编码乱码的问题
●public InputStreamReader(InputStream is,String charset):
可以指定编码把原始字节流转换成字符流,如此字符流中的字符不乱码。

(4)具体使用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

public class InputStreamReader {
    public static void main(String[] args) throws Exception {
        // 代码UTF-8   文件 GBK  "E:\JAVA学习资料\Day26.txt"
        // 1、提取GBK文件的原始字节流。
        InputStream is = new FileInputStream("E:\\JAVA学习资料\\Day26.txt");
        // 2、把原始字节流转换成字符输入流
        // Reader isr = new InputStreamReader(is); // 默认以UTF-8的方式转换成字符流,会乱码的,跟直接使用FileReader是一样的
        Reader isr = new java.io.InputStreamReader(is , "GBK");  //以指定的GBK编码转换成字符输入流  解决了乱码问题

        BufferedReader br = new BufferedReader(isr);
        String line;
        while ((line = br.readLine()) != null){
            System.out.println(line);
        }
    }
}

(三)字符输出转换流

(1)引入

①如果需要控制写出去的字符使用的编码,怎么办?

●可以把字符以指定编码获取字节后再使用字节输出流写出去:
“哈哈哈哈”.getBytes(编码)
●也可以使用字符输出转换流实现。

(2)字符输出转换流

在这里插入图片描述
●字符输入转换流:OutputStreamWriter,可以把字节输出流按照指定编码转换成字符输出流。

构造器说明
public OutputStreamWriter(OutputStream os)可以把原始的字节输出流按照代码默认编码转换成字符输出流,几乎不用。
public OutputStreamWriter(OutputStream os,String charset)可以把原始的字节输出流按照指定编码转换成字符输出流(重点)

(3)字符输出转换流OutputStreamWriter的作用

●public OutputStreamWriter(OutputStream os,String charset)
●可以指定编码把字节输出流转换成字符输出流,从而可以指定写出去的字符编码!

(4)具体使用

在这里插入图片描述
在这里插入图片描述
输出的变成了乱码,说明了字符输出转换流OutputStreamWriter,成功的由UTF—8,变为了GBK

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

呦呦呦欸哟哟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值