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