转换流

作者: Mango_yes | 来源:发表于2017-09-07 10:06 被阅读0次

    转换流包括两个:OutputStreamWriter和InputStreamReader

    OutputStreamWriter:是Writer的子类,将输出的字符流变为字节流,即将一个字符流的输出对象变为字节流输出对象。

    InputStreamReader:是Reader的子类,将输入的字节流变为字符流,即将一个字节流的输入对象变为字符流的输入对象。

    InputStreamReader这个类是按照指定编码读取字节流将其解码为字符流 。也就是说它是先读取字节流,先将文件以字节流的方式转换为对象,再由该类解码为字符,具体如下:(下面是一个以按照UTF-8编码字节流从a.txt文件读入,再解码为字符流,最后以字符流写入到b.txt文件中)

    FileWriter fileWriter = new FileWriter("C:\\myPicture\\b.txt");

    FileInputStream fStream = new FileInputStream("C:\\myPicture\\a.txt");

    //InputStreamReader isr =newInputStreamReader(in);这样创建对象,会用本地默认码表读取,将会发生错误解码的错误

    InputStreamReader iStreamReader = new InputStreamReader(fStream,"UTF-8");//以指定的字符编码读取字节流读并解码为字符流

    int len = 0;

    char[] cbuf =new char[1024];

    while((len=iStreamReader.read(cbuf))!=-1){

    fileWriter.write(cbuf,0,len);

    }

    fileWriter.flush();

    fStream.close();

    iStreamReader.close();

    fileWriter.close();

    转换流和子类区别

    发现有如下继承关系:

    OutputStreamWriter: --子类FileWriter:

    InputStreamReader:---子类FileReader;

    父类和子类的功能有什么区别呢?

    OutputStreamWriter和InputStreamReader是字符和字节的桥梁:也可以称之为字符转换流。字符转换流原理:字节流+编码表。

    FileWriter和FileReader:作为子类,仅作为操作字符文件的便捷类存在。当操作的字符文件,使用的是默认编码表时可以不用父类,而直接用子类就完成操作了,简化了代码。

    InputStreamReader isr = new InputStreamReader(new FileInputStream("a.txt"));//默认字符集。

    InputStreamReader isr = new InputStreamReader(new

    FileInputStream("a.txt"),"GBK");//指定GBK字符集。

    FileReader fr = new FileReader("a.txt");

    这三句代码的功能是一样的,其中第三句最为便捷。

    相关文章

      网友评论

          本文标题:转换流

          本文链接:https://www.haomeiwen.com/subject/jpgbjxtx.html