关于转换流的一点理解

醉酒当歌 提交于 2020-02-08 09:34:05

先看如下代码:

public class ConvertTest {
    public static void main(String[] args) {
        byte[] a = new byte[8];
        try {
            System.in.read(a);
            System.out.write(a);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在这里插入图片描述
\quad我工程默认的字符集为UTF-8,所以每个ASCII字符占1字节,这里我们看到,我们通过write把字节数组输出到控制台的时候,并不是直接以字节的形式出现的,这意味着不仅仅在read的时候字节输入流把读取的字符decode成了字节然后读入字节数组,同样在write的时候字节输出流把写出字节数组的字节encode成了字符。
\quad转换流是连通字节流和字符流的桥梁,InputstreamReader是字节流通向字符流的桥梁,它使得原本只能写入字节到缓冲内存的InputStream类型的System.in可以写入字符,OutputStreamWriter是字符流通向字节流的桥梁,它使得原本只能从缓冲内存读出字节的PrintStream类型的System.out可以读出字符
\quad但是,无论是InputStream的System.in还是PrintStream的System.out,它们的方法本身并不支持上述操作。
在这里插入图片描述
在这里插入图片描述
至于那个int,暂时不懂,个人猜想应该有相应的编码方式。(我要是懂的话就直接解释源码了。。)
\quad所以我认为,InputStreamReader应该是把本来应该写入的字节转换成了字符再写入字符串,OutputStream应该是把字符串里的字符转换成本来应该读出的字节。
\quad其它的等我头发变少了的时候再完善吧。。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!