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不是个字符?还是什么地方我理解错了?
望高人指教。 

解决方案 »

  1.   

    你确定ASCII表上的字符都是占用两个字节?
    还有就是楼主漏了导入 io 包
      

  2.   

    java的字符、数字、汉字都是占两个字节的 因为它采用的是unicode16编码A的unicode16编码应该是0000 0000 0100 0001read()方法读的是后一个字节 转化成10进制就是65了
      

  3.   

    A是char类型的,而char类型数据就是占8位,一个字节。
      

  4.   

    0000 0000 0100 0001如果是AscII码
    0000 0000被省略了
      

  5.   

    read 是读   字符    采用的unicode的编码A的unicode编码  转化为10进制  因该就是你看到的那个数字把
      

  6.   

    楼主理解错误,楼上不少回答也是理解错误。
    楼主要记住:System.in是一个字节流,而不是字符流。当你从键盘上输入'A'时,是将本地系统的编码字符(对于英文字符,就是ASCII,对于汉字,在WINDOW平台,就是GBK),直接读取字节值(对于英文字符,就是ASCII值--一个字节,对于汉字,在WINDOW平台,读取的就是GBK的两个字节),只有用字符流读取时,才会转换成UNICODE。
      

  7.   

    那Unicode和Ascii,Gbk有什么区别吗?
    哈哈 多谢