Java中的I/O转换流

目录

编码转换的问题

转换流的原理

OutputStreamWriter

InputStreamReader


 

编码转换的问题

 

在上一篇中我们讲了什么是编码集,我们知道IDEA默认编码集为UTF-8,而Win10默认使用GBK。这就导致了在IDEA中读取GBK编码出现???的乱码。转换流就是用来解决这种乱码问题的。

https://blog.csdn.net/Delicious_Life/article/details/105343526

 

 

转换流的原理

 

在IDEA中使用FileInputStream(文件输入流)把中文字符转换成二进制字节,使用FileOutputStream(文件输出流)把二进制字节转换成中文字符。

但文件输入输出流只能将字符或字节安装IDEA中默认的编码表形式进行转换,这就造成了winows本地转Java代码时出现乱码。

转换流有两种,InputStreamReader是字节流通向字符流的桥梁,OutputStreamWriter是字符流通向字节流的桥梁。转换流的秘诀就在于它支持指定字符集进行编码和解码

 

 

OutputStreamWriter

 

java.io.OutputStreamWriter  extends Writer是字符流通向字节流的桥梁,把能看懂的变成看不懂的(编码)

 

构造方法

OutputStreamWriter(OutputStream out)  //创建使用默认字符编码的OutputStreamWriter
OutputStreamWriter(OutputStream out,String charsetName)  //创建使用指定字符集的OutputStreamWriter

//指定的编码表不区分大小写,可以是utf-8/gbk,不指定默认使用utf-8


使用步骤

1.创建OutputStreamWriter对象,构造方法中传递字节输出流和指定的编码表的编码表名称

2.使用OutputStreamWriter对象中的方法write,把字符转换为字节存储缓冲区中(编码)

3.使用OutputStreamWriter对象中的方法flush,把内存缓冲区中的字节刷新到文件中(使用字节流写字节的过程)

4.释放资源

    /**
     * 使用转换流OutputStreamWriter写GBK格式的文件
     */
    private static void write_gbk() throws IOException {
        OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("10_IO\\gbk.txt"), "GBK");
        osw.write("你好");
        osw.flush();
        osw.close();
    }

 

 

InputStreamReader

 

java.io.InputStreamReader extends Reader,字节流通向字符流的桥梁,把看不懂的变成看得懂的(解码)

 

构造方法

InputStreamReader(InputStream in)  //创建一个使用默认字符集的InputStreamReader
InputStreamReader(InputStream in, String charsetName) //创建使用指定字符集的InputStreamReader

//指定字符集同样不区分大小写,不指定默认是utf-8  

 

使用步骤

1.创建InputStreamReader对象,构造方法中传递字节输入流和指定的编码表名称

2.使用InputStreamReader对象中的方法read读取文件

3.释放资源

(构造方法中指定的编码表名称要和文件的编码相同,否则会发送乱码)

    /**
     * 使用转换流InputStreamReader读取GBK格式的文件
     */
    private static void write_gbk() throws IOException {
        InputStreamReader isr = new InputStreamReader(new FileInputStream("10_IO\\gbk.txt"), "GBK");

        int len = 0;

        while ((len = isr.read()) != -1) {
            System.out.println((char) len);
        }
        isr.close();
    }

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值