再次讨教java字符的问题

来源:百度知道 编辑:UC知道 时间:2024/09/20 16:52:40
书中说java是用unicode 来表示字符,即每个字符占两个字节。 且unicode和asc2 码兼容,也就是说和ASCII码兼容的那部分字符的高字节全部为0。比如字符a的ASCII为01100001则它的unicode 为00000000 01100001
java.io.inputstream 这个类有个方法是read(),手册上说是一次读取一个byte,并返回十进制的数字。这本来没问题,但请看下面的例子:
import java.io.*;

public class streamdemo{
public static void main(String[] args){
try{
System.out.print("input a letter:");
System.out.println("what you input is:"+ System.in.read());
}
catch(IOException e){e.printStackTrace();}
}
}

我输入一个字符a,屏幕中就可以显示出a对应的数字97. 我就不明白了,输入的a是一个字符,而java中字符是占两个字节的,即00000000 01100001,为何read()一次就可以把a的两个字节的内容给读入了?不是应该只读出高位的8个0吗?为何连低位的也一起给读了?
什么地方我理解错了?
望高人指教。

UTF-8的特点是对不同范围的字符使用不同长度的编码。对于0x00-0x7F之间的字符,UTF-8编码与ASCII编码完全相同

read
public abstract int read()
throws IOException
从输入流中读取数据的下一个字节。返回 0 到 255 范围内的 int 字节值。如果因为已经到达流末尾而没有可用的字节,则返回值 -1。在输入数据可用、检测到流末尾或者抛出异常前,此方法一直阻塞。
子类必须提供此方法的一个实现。
返回:
下一个数据字节;如果到达流的末尾,则返回 -1。
抛出:
IOException - 如果发生 I/O 错误。
java默认的字符编码是utf-8。utf-8对于英文字母来说一个字母存储时是一个字节存储,对于汉字是3个字节的存储。

读入的是ascii码,好像不是unicode码。

agree with de frist floor