日期:2014-05-20  浏览次数:20745 次

System.in的问题
System.out.println(   System.in.read()   );
a被看做两个字节,高位为0低位为97(十进制),
以字节流方式读入后应当只读入了高位0,
那为什么输出结果是97,而不是0呢?


------解决方案--------------------
读入的时候应该是先读入低字节,然后是高字节;
你把第二次读入的输出来看看!
------解决方案--------------------
println(int)

print all (hight + low)
------解决方案--------------------
把a转型为int型了,如果要输出字符a,那得用System.out.println((char)System.in.read());强制把97转换成字符。
------解决方案--------------------
你输入a后面按了回车键当然流中会存在两个字节而read()每次读入一个字节,那下一次读入自然就是读入回车键了,
当我们用键盘输入字符时,并不是按java的 unicode来对字符编码,而是按照本机的默认字符集来进行编码,比如我们中文操作系统都是gbk---大伙说对不对,关注..
------解决方案--------------------
对。
读入的字符会被转为unicode。
但是使用read,返回的是读入的一个字节,这个字节是标准输入流提供的,所以读入的是a的ascii码(或者说是操作系统内码吧)。
使用read时,要等到输入按下回车后才能读出数据,而回车会根据操作系统不同而被读成\r\n或者\n,也就是13 10或者10。
所以第二次read读出了13。