转换流的基本使用

转换流如InputStreamReader和OutputStreamWriter用于解决代码编码与文件编码不一致时的乱码问题。它们能将字节流按指定编码转换为字符流,保证数据正确读写。例如,通过使用GBK编码的InputStreamReader读取GBK编码的文件,再用BufferedReader处理,可以避免乱码。同样,OutputStreamWriter用于编码转换的字符输出。
摘要由CSDN通过智能技术生成

转换流的意义

当代码编码和文件编码不一致时,如果使用字符流读取时会出现乱码的问题,而转换流可以解决这个问题。

如何解决乱码问题

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

InputStreamReader(字符输入转换流)

可以把原始的字节流按照编码转换成字符输入流

构造器

public InputStreamReader(InputStream is) :可以把原始的字节流按照代码默认编码转换成字符输入流。几乎不用,意义不大
public InputStreamReader(InputStream is,String charset):可以把原始的字节流按照指定编码转换成字符输入流,这样字符流中的字符就不乱码了(重点)

代码编写

    try (
                BufferedReader reader = new BufferedReader (new InputStreamReader (new FileInputStream ("D:\\Users\\cczyan\\Desktop\\JavaStudy\\txt01.txt"), "GBK"));
        ) {
            String line;
            while ((line = reader.readLine ()) != null) {
                System.out.println (line);
            }
        } catch (Exception e) {
            e.printStackTrace ();
        }

OutputStreamWriter:字符输出转换流

把直接输出流按照指定编码转换成字符输出流

构造器

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

代码实现

try (
BufferedWriter bufferedWriter = new BufferedWriter (new OutputStreamWriter (new FileOutputStream (“D:\Users\cczyan\Desktop\JavaStudy\txt01.txt”), “GBK”));
) {
bufferedWriter.write (“我是GBK编码哦”);
bufferedWriter.newLine ();
bufferedWriter.write (“我是重复的”);
} catch (Exception e) {
e.printStackTrace ();
}

实例

通过读取一个文件并将其内容以该文件的编码格式复制到另外一个文件

try (
                BufferedReader bufferedReader = new BufferedReader (new InputStreamReader (new FileInputStream ("D:\\Users\\cczyan\\Desktop\\JavaStudy\\txt01.txt"), "GBK"));
                BufferedWriter bufferedWriter = new BufferedWriter (new OutputStreamWriter (new FileOutputStream ("D:\\Users\\cczyan\\Desktop\\JavaStudy\\txt02.txt"), "GBK"))
        ) {
            String line;
            while ((line=bufferedReader.readLine ())!=null){
                bufferedWriter.write (line);
                bufferedWriter.newLine ();
                System.out.println (line);
            }
        } catch (Exception e) {
            e.printStackTrace ();
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值