为了账号安全,请及时绑定邮箱和手机立即绑定

输入流每字节读取如何工作?

输入流每字节读取如何工作?

ITMISS 2023-08-23 16:50:53
我无法理解 System.in.read() 方法是如何工作的。有这么一段代码:    public static void main(String[] args) throws IOException {        while (true){            Integer x = System.in.read();            System.out.println(Integer.toString(x, 2));        }我知道 System.in.read() 方法从输入流中读取每个字节。所以当我输入'A'(U+0041,一个字节用于存储字符)时 - 程序输出是: 1000001 (U+0041) 1010 (NL) - it works as expected.但是当我输入“Я”(U+042F,两个字节用于存储字符)时 - 输出是: 11010000 (byte1) 10101111 (byte2) 1010 (byte3 - NL)字母“Я”(U+042F) 的真实代码是 10000101111。为什么 11010000 10101111 (byte1 + byte2) 不是字母 'Я'(U+042F) 的二进制代码?
查看完整描述

1 回答

?
慕村9548890

TA贡献1884条经验 获得超4个赞

这将取决于向 发送数据的外部进程System.in。它可以是命令 shell、IDE 或其他进程。

在命令 shell 的典型情况下,shell 将配置字符编码。(chcp在 Windows 上、locale charmap在 Linux 上。)

字符编码确定图形字符或字形如何编码为数字。例如,Windows 计算机可能使用“Windows-1251”的“代码页”并将“Я”编码为一个字节 (0xCF)。或者,它可以使用 UTF-8 并将“Я”编码为两个字节 (0xD0 0xAF),或使用 UTF-16 并使用两个不同的字节 (0x04 0x2F)。

您的结果表明,向 Java 程序发送数据的进程正在使用 UTF-8 作为编码。


查看完整回答
反对 回复 2023-08-23
  • 1 回答
  • 0 关注
  • 140 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信