115、缓冲流使用介绍

一、InputStreamReader类  

    1、转换流`java.io.InputStreamReader`,是Reader的子类,是从字节流到字符流的桥梁。它读取字节,并使用指定的字符集将其解码为字符。它的字符集可以由名称指定,也可以接受平台的默认字符集。 

    2、构造方法
        InputStreamReader(InputStream in)`: 
            创建一个使用默认字符集的字符流。 
        InputStreamReader(InputStream in, String charsetName)`: 
            创建一个指定字符集的字符流。
二、OutputStreamWriter类

    1、转换流`java.io.OutputStreamWriter` ,是Writer的子类,是从字符流到字节流的桥梁。使用指定的字符集将字符编码为字节。它的字符集可以由名称指定,也可以接受平台的默认字符集。 

    2、构造方法
        OutputStreamWriter(OutputStream in)`: 
            创建一个使用默认字符集的字符流。 
        OutputStreamWriter(OutputStream in, String charsetName)`: 
            创建一个指定字符集的字符流。
三、转换流理解图解

四、案例

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;

/*
    java.io.InputStreamReader extends Reader
    InputStreamReader:是字节流通向字符流的桥梁:它使用指定的charset读取自己诶并将其解码为字符。

    继承父类的成员方法:
        int read()读取单个字符并返回。
        int read(char[] cbuf)一次性读取多个字符,将字符传入数组
        void close()关闭该流并释放与之关联的所有资源。
    构造方法:
        InputStreamReader(InputStream in)创建一个使用默认字符集的InputStreamReader
        InputStreamReader(InputStream in , Streing charsetName)创建指定字符集的InputStreamReader
    使用步骤:
        1、创建InputStreamReader对象,构造方法中传递字节输入流和指定的编码表名称。
        2、使用InputStreamReader对象中年的方法read读取文件
        3、释放资源。
    注意事项:
        构造方法中指定的编码表名称要和文件的编码相同
 */
public class Demo02InputStreamReader {
    public static void main(String[] args) throws IOException {
        System.out.println("===使用默认编码表读取UTF-8文件===");
        InputStreamReader isr1 = new InputStreamReader(new FileInputStream(
                "我是UTF-8文件.txt"));
        char[] chars = new char[1024];
        int len = 0;
        while((len = isr1.read(chars)) != -1){
            System.out.println(new String(chars,0,len));
        }

        System.out.println("=======使用GBK编码表读取GBK文件======");
        InputStreamReader isr2 = new InputStreamReader(new FileInputStream(
                "我是GBK文件.txt"), "GBK");
        char[] chars2 = new char[1024];
        int len2 = 0;
        while((len2 = isr2.read(chars2)) != -1){
            System.out.println(new String(chars2,0,len2));
        }

        System.out.println("=======使用UTF-8编码表读取GBK文件======");
        InputStreamReader isr3 = new InputStreamReader(new FileInputStream(
                "我是GBK文件.txt"), "UTF-8");
        char[] chars3 = new char[1024];
        int len3 = 0;
        while((len3 = isr3.read(chars3)) != -1){
            System.out.println(new String(chars3,0,len3));
        }
    }
}

案例二、OuputStreameWriter

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;

/*
FileReader可以读取IDE默认编码格式(UTF-8)的文件
FileReader读取系统默认编码(中文GBK)会产生乱码
    java.io.OutputStreamWriter extends Writer
    outputStreamWriter:是字符流通向字节流的桥梁;可使用指定的charset将要写入的字符编码成字节。

    继承父类共性方法:
        -void write(int c)写入单个字符。
        -void write(char[] cbuf)写入字符数组
        -abstract void write(char[] cbuf,int off, int len)写入字符串某一部分.
        -void write(String str)写入字符串
        -void write(String str, int off, int len)写入字符串某一部分
        -void flush()刷新该流缓冲
        -void close()关闭此流,但要先刷新它
    构造方法:
        outputStreamWriter(outputStream out)创建使用默认字符编码的outputStreamWriter
        OutputStreamWriter(outputStream out,String charsetName)创建使用指定字符集的outputStreamWriter
        参数:
            OutputStream out:字节输出流,可以用来写转换之后的字节到文件中
            String charsetName:指定的编码表名称,不区分带下写,可以是utf-8/UTF-8,gbk/GBK,...不指定默认使用UTF-8
    使用步骤:
        1、创建OutputStreamWriter对象,够着方法中传递字节输出流指定的编码表名称。
        2、使用OutputStreamWriter对象的方法Write,把字符转换为字节储存缓冲区中(编码)
        3、使用OutputStreamWriter对象中的方法flush,把内存缓冲区中内容写到硬盘中。
        4、释放资源
 */
public class Demo01OutputStreameWriter {
    public static void main(String[] args) throws IOException {
        /*
        用默认方式UTF-8写入UTF-8文件
         */
        OutputStreamWriter osw1 = new OutputStreamWriter(new FileOutputStream(
                "我是UTF-8文件.txt"));
        osw1.write("中华人民共和国(UTF-8)");

        osw1.flush();
        osw1.write("\r\n,伟大的祖国");
        osw1.close();

        /*
        用默认方式UTF-8写入GBK文件---这里看会是乱码,要直接打开文本
         */
        OutputStreamWriter osw2 = new OutputStreamWriter(new FileOutputStream(
                "我是GBK文件.txt"),"GBK");
        osw2.write("中华人民共和国(UTF-8)");

        osw2.flush();
        osw2.write("\r\n,伟大的祖国");
        osw2.close();

    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值