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的知识点。

  • 相关阅读:
    Django之信号
    Git协同开发操作+GitHub
    Django之auth组件
    Django之contenttyes组件
    Django之缓存
    Django之请求数据格式
    Django REST framework之渲染器组件以及阅读源码流程
    DJango REST framework之分页组件以及对源码的阅读
    Django REST framework之视图路由组件以及分层分析
    Leetcode103. Binary Tree Zigzag Level Order Traversal二叉树的锯齿形层次遍历
  • 原文地址:https://www.cnblogs.com/cuglkb/p/6906403.html
Copyright © 2011-2022 走看看