沈浩 发表于 2013-4-20 18:56
假如有两个字符ab 用字节流读取只读了两次就能读到 证明a和b分别占一个字节
字符流一次读两个字节 为什 ...
不好意思,白天没有上网。楼上两位的回答不知道你看了没有。你看看二楼说的。二楼说了,“对于上面你说的a,如果你用字节流,他就是以1个字节为单位,97够装了,如果你用字符流,a就是装在2个字节的空间里。字符不是只用1个字节表示,你可以联想一点,中国的字有多少,1个字节能装完吗,显然不够,utf-8把装了全世界的编码集,1个字节又怎么够。”
a和b存放的空间的确是2字节。a和b事实上都只占用一个字节。这点没问题。你用字节流取时。由于每两个字节中只有一个字节有数据,所以你两次就能取出a和b
但是如果你试验用的不是ab而是汉字“你好”,你看看读出几次?中国的汉字在编码表中占两个字节,很多其他字符也占用俩字节。所以我说字符流读取一个字符,其实底层调用两次字节流的读操作。
下面给出了一个小演示代码:
第一次,你在a.txt中存ab 控制台读出ab
第二次,你把a.txt中内容换成“你好”,打印结果是
?
?
?
?
这样你应该明白了吧?- import java.io.*;
- class Test
- {
- public static void main(String[] args) throws IOException
- {
- FileInputStream fis = new FileInputStream("a.txt");
-
- int ch = 0;
- while((ch=fis.read())!=-1)
- {
- System.out.println((char)ch);
- }
- }
- }
复制代码 |