从InputStream捕获的值在java中未正确显示

从InputStream捕获的值在java中未正确显示,java,io,Java,Io,有人能帮助理解下面的程序吗 import java.io.BufferedInputStream; import java.io.IOException; public class CmdReader { public static void main(String []args) { try (BufferedInputStream bis = new BufferedInputStream(System.in)) { System.out.

有人能帮助理解下面的程序吗

import java.io.BufferedInputStream;
import java.io.IOException;

public class CmdReader {
    public static void main(String []args) {

        try (BufferedInputStream bis = new BufferedInputStream(System.in)) {
            System.out.print("Enter age: "); 
            int age = bis.read();

            System.out.println("Hello, you are " + age);
        } catch(IOException e) {
            e.printStackTrace();
        }   
    }   
}   
输出:

Enter age: 12
Hello, you are 49
我不明白为什么用49代替12


非常感谢您的帮助。

49
是数字
1
的ASCII码。您的代码只读取第一个字符,将其赋值为
int
将使用该字符的值-它不会将其转换为它表示的数字。您应该研究使用或其他方法解析值
BufferedInputStream
只读取数据,不读取其他内容。

49
是数字
1
的ASCII码。您的代码只读取第一个字符,将其赋值为
int
将使用该字符的值-它不会将其转换为它表示的数字。您应该研究使用或其他方法解析值
BufferedInputStream
只读取数据,不读取其他内容。

实际上,49是System.in读取的第一个字节的值。它是ASCII码(很可能不是)取决于终端的类型或馈送系统的类型。但是,您建议使用文本库读取文本是正确的。感谢您的输入,我想知道是否有任何方法可以将字节流值转换为字符流(编码级别如StreamEncoder),因为BufferedInputStream是基于字节的流,System.out是基于字符的流。所以,它不同于通过编码来表示数据,因为字符流使用Unicode表示。我查看了用于在java中更改编码的字符集API,但无法理解。如果我错了,请纠正我。请推荐Java内置API。对于上述输出,我期望的是,当我通过字节流输入1时,System.out应该打印1,尽管它是基于编码或类似内容的字符流。@Sriram M maybe int age=bis.read()-“0”可以满足您的要求。实际上,49是System.in读取的第一个字节的值。它是ASCII码(很可能不是)取决于终端的类型或馈送系统的类型。但是,您建议使用文本库读取文本是正确的。感谢您的输入,我想知道是否有任何方法可以将字节流值转换为字符流(编码级别如StreamEncoder),因为BufferedInputStream是基于字节的流,System.out是基于字符的流。所以,它不同于通过编码来表示数据,因为字符流使用Unicode表示。我查看了用于在java中更改编码的字符集API,但无法理解。如果我错了,请纠正我。请推荐Java内置API。对于上述输出,我期望的是当我通过字节流输入1时,System.out应该打印1,尽管它是基于编码或类似内容的字符流。@Sriram M maybe int age=bis.read()-“0”可以满足您的要求。