zoukankan      html  css  js  c++  java
  • java_转换流

     1.1   - OutputStreamWriter类
     
    OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的字符编码表,将要写入流中的字符编码成字节。
    它的作用的就是,将字符串按照指定的编码表转成字节,在使用字节流将这些字节写出去。
     
    - 代码演示:
    public static void writeCN() throws Exception {
            //创建与文件关联的字节输出流对象
            FileOutputStream fos = new FileOutputStream("c:\cn8.txt");
            //创建可以把字符转成字节的转换流对象,并指定编码
            OutputStreamWriter osw = new OutputStreamWriter(fos,"utf-8");
            //调用转换流,把文字写出去,其实是写到转换流的缓冲区中
            osw.write("你好");//写入缓冲区。
            osw.close();
        }
    转换流的构造函数
     
    1.2   - InputStreamReader类
     
    查阅InputStreamReader的API介绍,InputStreamReader 是字节流通向字符流的桥梁:它使用指定的字符编码表读取字节并将其解码为字符。
    它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。
    代码演示:
    public class InputStreamReaderDemo {
        public static void main(String[] args) throws IOException {
            //演示字节转字符流的转换流
            readCN();
        }
        public static void readCN() throws IOException{
            //创建读取文件的字节流对象
            InputStream in = new FileInputStream("c:\cn8.txt");
            //创建转换流对象
     
            //InputStreamReader isr = new InputStreamReader(in);这样创建对象,会用本地默认码表读取,将会发生错误解码的错误
            InputStreamReader isr = new InputStreamReader(in,"utf-8");
            //使用转换流去读字节流中的字节
            int ch = 0;
            while((ch = isr.read())!=-1){
                System.out.println((char)ch);
            }
            //关闭流
            isr.close();
        }
    }
    1.3    - 转换流和子类区别
     
    发现有如下继承关系:
    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");
     
    这三句代码的功能是一样的,其中第三句最为便捷。
    注意:一旦要指定其他编码时,绝对不能用子类,必须使用字符转换流。什么时候用子类呢?
    条件:
    1、操作的是文件。2、使用默认编码。
    总结:
    字节--->字符 : 看不懂的--->看的懂的。 需要读。输入流。 InputStreamReader
    字符--->字节 : 看的懂的--->看不懂的。 需要写。输出流。 OutputStreamWriter
  • 相关阅读:
    代码优化
    使用python的Flask实现一个RESTful API服务器端
    数据结构与算法之排序
    Ubuntu 13.04/12.10安装Oracle 11gR2图文教程(转)
    Linux 下开启ssh服务(转)
    PLSQL Developer 9.如何设置查询返回所有纪录(转)
    linux下安装oracle11g 64位最简客户端(转)
    Linux下关于解决JavaSwing中文乱码的情况(转)
    servlet(jsp)中的重定向和转发
    在用TabbarController中出现navigationController 嵌套报错
  • 原文地址:https://www.cnblogs.com/anzhi/p/7443668.html
Copyright © 2011-2022 走看看