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对应的数字65. 我就不明白了,输入的A是一个字符,而java中字符是占两个字节的,为何read()一次就可以把A的两个字节的内容给读入了?
难道从键盘上输入的A不是个字符?还是什么地方我理解错了?
望高人指教。
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对应的数字65. 我就不明白了,输入的A是一个字符,而java中字符是占两个字节的,为何read()一次就可以把A的两个字节的内容给读入了?
难道从键盘上输入的A不是个字符?还是什么地方我理解错了?
望高人指教。
还有就是楼主漏了导入 io 包
0000 0000被省略了
楼主要记住:System.in是一个字节流,而不是字符流。当你从键盘上输入'A'时,是将本地系统的编码字符(对于英文字符,就是ASCII,对于汉字,在WINDOW平台,就是GBK),直接读取字节值(对于英文字符,就是ASCII值--一个字节,对于汉字,在WINDOW平台,读取的就是GBK的两个字节),只有用字符流读取时,才会转换成UNICODE。
哈哈 多谢