1.在计算机中,任何数据都是以字节形式存在的,你应该知道,CPU是计算机中的中央处理器,任何数据和程序都是经过CPU去调度处理的,而CPU只能处理二进制数据,所以在计算机中任何数据都是字节形式存在的,一个字节等于8个二进制位(也就是老师上课说的,电信号,开是1,关是0)。
2.解码的问题: 其实当我们打开一个记事本的时候,你看到的的确是你想看到的一些数据,比如中文字符等,其实这并不是我们直接写入就已经是字符了,其实这一系类的字节数据,只是为了将这些字节数据表现出我们能看得懂的信息,所以记事本这个软件在你打开的时候,进行解码操作,将这些字节数据按照系统平台默认的字符编码进行查表,2个字节对应码表上一个字符(至少中文系统GBK码表是这样的),将对应的字符显示出来了而已。
3.对于InputStreamReader 它是字节流通向字符流的桥梁,每次调用 InputStreamReader 中的一个 read() 方法都会从基础输入流读取一个或多个字节,注意是字节(因为我们在计算机中存储的文件本身就都是一字节形式存储的),因为我们知道它是转换流,读取到之后,会自动按照平台默认字符编码将其解码转换成字符,这样你就的到的是字符了,你去查API你可以知道,这个类的构造方法可以指定一个Charset,也就是字符码表,这是我的理解,呵呵。
4.OutputStreamWriter 字符流通向字节流的桥梁,每次调用 write() 方法都会针对给定的字符码表将字符转换成字节,不指定的话,就是平台默认的喔,因为我们知道在字符码表上1个字符会对应2个字节码嘛,反过来也是一样,所以读取到之后,会自动按照平台默认字符编码将其编码转换成字节了,这样写到文件中又成了字节了。
5.至于你说的为什么这两个类要划分到字符流那边的话,应该就是一种命名分类约定吧,可能只是为便于管理吧,因为毕竟后面是Reader和Writer结尾都是字符流嘛,至于这个,你不用太过于纠结,哈哈,明白原理和用法就好了。 |