关于转换流的一点理解

先看如下代码:

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 其它的等我头发变少了的时候再完善吧。。

发布了12 篇原创文章 · 获赞 2 · 访问量 203

猜你喜欢

转载自blog.csdn.net/Ingsuifon/article/details/104183661
今日推荐