Java System.in.read实际返回什么?

Java System.in.read实际返回什么?,java,java-io,Java,Java Io,什么是: System.in.read() 返回?报告说: 返回: 数据的下一个字节,如果到达流的末尾,则为-1。 但例如,如果我输入:10我将返回49。这是为什么?49是字符1的ASCII值。它是第一个字节的值 在控制台或终端上输入10Enter时产生的字节流包含三个字节{49,48,10}(在我的Mac上,可能以10,12或12结束,而不是10,具体取决于您的系统) 因此,简单代码段的输出 int b = System.in.read(); while (b != -1) { Sy

什么是:

System.in.read()
返回?报告说:

返回: 数据的下一个字节,如果到达流的末尾,则为-1。


但例如,如果我输入:
10
我将返回
49
。这是为什么?

49
是字符
1
的ASCII值。它是第一个字节的值

在控制台或终端上输入10Enter时产生的字节流包含三个字节
{49,48,10}
(在我的Mac上,可能以10,12或12结束,而不是10,具体取决于您的系统)

因此,简单代码段的输出

int b = System.in.read();
while (b != -1) {
    System.out.println(b);
    b = System.in.read();
}
输入10并按enter键后,is(在我的机器上)


当您输入
10
时,它不是作为整数读取的,而是作为字符串读取的,更准确地说,是作为字节数组读取的

49是字符
1

的ASCII码。in.read()
仅读取一个字节

49是1的Unicode点值

尝试打印:

System.out.println((char)49)


这将帮助您更好地理解它。

因为
10
是两个字节。一个字节代表字符1,后面是一个字节代表字符
0
@saplingPro要知道的是,当你输入“10”时,你输入的不是数字10,而是碰巧是“10”但可能是“foo”甚至“foo”的文本☃ “正在融化!”。
System.in
看到的是此文本流的字节。对于ascii和扩展ascii(所以,这里不是我的小雪人),请查看
49
48
10