zoukankan      html  css  js  c++  java
  • OutputStreamWriter API 以及源码解读

    OutputStreamWriter是字符流与字节流之间的桥梁。

    通过它写入的字符流可以通过特殊的字符集转化为字节流。这个特殊的字符集可以指定,也可以采用平台默认的字符集。

    每一次调用write()方法都会导致字符转化为字节。最后的结果(转化后的字节)会先缓存到一个buffer中,然后在写入到输出流。

    为了效率,可以采用BufferedWriter对象包裹OutputStreamWriter对象的方式来避免频繁的转化操作(字符转化为字节)。

    比如,Writer writer = new BufferedWriter(new OutputStreamWriter(System.out));

    构造函数有四个,除了第一个是使用默认的字符encoding方式,其它的都是指定encoding方式。

    方法有六个,除了getEncoding() 方法是新增的方法,其它的方法都是在抽象类writer中有过定义的。

    查看源码

    package java.io;
    
    import java.nio.charset.Charset;
    import java.nio.charset.CharsetEncoder;
    import sun.nio.cs.StreamEncoder;
    
    public class OutputStreamWriter extends Writer {
    
        private final StreamEncoder se;
    
       
        public OutputStreamWriter(OutputStream out, String charsetName)
            throws UnsupportedEncodingException
        {
            super(out);
            if (charsetName == null)
                throw new NullPointerException("charsetName");
            se = StreamEncoder.forOutputStreamWriter(out, this, charsetName);
        }
    .......   //balabala  一大段
    }

    发现所有的方法都是调用 StreamEncoder 这个对象的方法。于是我又跑去看StreamEncoder 的源码。

    发现里面就是通字符集 将 字符 转换为 字节,然后再调用OutputStream对象向字节流写入字节。

    哎呀,又说简单了。其实没那么简单,也没那么难,看看源码就好了。这里面还涉及Java.nio的知识点。

  • 相关阅读:
    [CareerCup][Google Interview] Merge Two BST
    [面试] 全排列(非递归)
    [CareerCup][Google Interview] 打印最长序列
    [CareerCup][Google Interview] 实现一个具有get_min的Queue
    [LeetCode] Count and Say
    [LeetCode] Decode Ways
    定期向企业内部员工介绍企业当前的业务状况及未来的发展方向
    基础数据的来源的统一
    项目管理之代码合并
    年初离职潮的思考
  • 原文地址:https://www.cnblogs.com/cuglkb/p/6906403.html
Copyright © 2011-2022 走看看