Unicode编码中英文和中文都占两个字节。
那么
InputStream in = new FileInputStream("C:/test.txt");
// test.txt里写的是 abc
int b;
for((b = in.read())!= -1) {
System.out.println((char)b);
}既然中文英文都占两个字节,那么in.read()每次读出一个字节,即一次只读出来一个英文字母的一半,那么(char)后,岂不是也要变成乱码? 可结果并非乱码
是我哪里理解错了么?
那么
InputStream in = new FileInputStream("C:/test.txt");
// test.txt里写的是 abc
int b;
for((b = in.read())!= -1) {
System.out.println((char)b);
}既然中文英文都占两个字节,那么in.read()每次读出一个字节,即一次只读出来一个英文字母的一半,那么(char)后,岂不是也要变成乱码? 可结果并非乱码
是我哪里理解错了么?
int b;
for((b = in.read())!= -1) {
System.out.println((char)b);
} 其次,楼主使用的是Stream的read,所以不管文件怎么样,read都一次只读取1个字节,也就是8位,所以不存在楼主说的什么读取一半的情况。楼主可能把把InputStream和Reader混淆了,从Reader派生的子类也有read(),这个返回的是一个unicode字符单元,即0---65535的整数。一段简单的代码如下,楼主观察连个不同的输出,你就明白了! /**
* t.txt的记录如下:
* Chinses
* 中文
*
* */
public static void main(String[] args) throws IOException{
File f = new File("C:/t.txt");
int b;
InputStream in = new FileInputStream(f);
while((b = in.read()) != -1){
System.out.print((char)b); // 中文 必然会出现???
}
System.out.println();
Reader r = new FileReader(f);
while((b = r.read()) != -1){
System.out.print((char)b); // 这里却相安无事!
}
}