轉換流

之前所學的流處理對象都是使用的默認的編碼,而今天學習的轉換流InputStreamReader,outputstreamwriter都是可以自己設定指定的編碼的,這樣就可以解決由於編碼不同而產生的亂碼問題了
在这里插入图片描述

package IOStream;

import java.io.*;

/**
 * writer和reader的底層也是對iostream的包裝構造
 * 而轉換流同理
 */
public class ioStreamReaderWriter {
    public static void main(String[] args) throws FileNotFoundException, UnsupportedEncodingException {
        isr_utf();
        //osw_utf();
    }


    /**
     *OutputStreamWriter是字符的桥梁流以字节流:向其写入的字符编码成使用指定的字节charset 。
     * OutputStreamWriter(OutputStream out)
     * 创建一个使用默认字符编码的OutputStreamWriter。
     * OutputStreamWriter(OutputStream out, Charset cs)
     * 创建一个使用给定字符集的OutputStreamWriter。
     * OutputStreamWriter(OutputStream out, CharsetEncoder enc)
     * 创建一个使用给定字符集编码器的OutputStreamWriter。
     * OutputStreamWriter(OutputStream out, String charsetName)
     * 创建一个使用命名字符集的OutputStreamWriter。
     *
     * void close()
     * 关闭流,先刷新。
     * void flush()
     * 刷新流。
     * String getEncoding()
     * 返回此流使用的字符编码的名称。
     * void write(char[] cbuf, int off, int len)
     * 写入字符数组的一部分。
     * void write(int c)
     * 写一个字符
     * void write(String str, int off, int len)
     * 写一个字符串的一部分。
     */
    private static void osw_utf() throws FileNotFoundException, UnsupportedEncodingException {
        FileOutputStream ops = new FileOutputStream("C:\\Users\\ASUS\\Desktop\\新建文件夹\\轉換輸出流_gbk.txt",true);
        OutputStreamWriter osw = new OutputStreamWriter(ops,"GBK");
        try(osw;) {
            osw.write("第一次的轉換流輸出測試");
            osw.flush();
            osw.write("A");
            osw.write("b");
            osw.flush();
            System.out.println(osw.getEncoding());
        } catch (IOException e) {
            e.printStackTrace();
        }


    }

    /**
     * InputStreamReader是从字节流到字符流的桥:它读取字节,并使用指定的charset将其解码为字符 。
     * InputStreamReader(InputStream in)
     * 创建一个使用默认字符集的InputStreamReader。
     * InputStreamReader(InputStream in, Charset cs)
     * 创建一个使用给定字符集的InputStreamReader。
     * InputStreamReader(InputStream in, CharsetDecoder dec)
     * 创建一个使用给定字符集解码器的InputStreamReader。
     * InputStreamReader(InputStream in, String charsetName)
     * 创建一个使用命名字符集的InputStreamReader。
     *
     * void close()
     * 关闭流并释放与之相关联的任何系统资源。
     * String getEncoding()
     * 返回此流使用的字符编码的名称。
     * int read()
     * 读一个字符
     * int read(char[] cbuf, int offset, int length)
     * 将字符读入数组的一部分。
     * boolean ready()
     * 告诉这个流是否准备好被读取。
     */
    private static void isr_utf() throws FileNotFoundException, UnsupportedEncodingException {
        FileInputStream fis = new FileInputStream("C:\\Users\\ASUS\\Desktop\\新建文件夹\\轉換輸出流_gbk.txt");
        InputStreamReader isr = new InputStreamReader(fis,"GBK");
        try(isr) {
            System.out.println(isr.ready());
            System.out.println(isr.getEncoding());
            char[] chars = new char[4];
            while ((isr.read(chars))!=-1){
                isr.read(chars);
                System.out.println(new String(chars));

            }
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值