gpt4 book ai didi

java - fileInputStream 和 Scanner 类之间差异背后的逻辑

转载 作者:行者123 更新时间:2023-12-02 04:34:54 24 4
gpt4 key购买 nike

我试图理解 Scanner.nextByte()FileInputStream.read() 之间的区别。我读过类似的主题,但没有找到问题的答案。主题中提出了类似的问题:Scanner vs FileInputStream

让我说一下我的理解:

假设 .txt 文件包含

1

那么,FileInputStream.read() 将返回 49

Scanner.nextByte() 将返回 1

如果.txt文件包含

a

FileInputStream.read() 将返回 97。

Scanner.nextByte() 将抛出 java.util.InputMismatchException

在我提供链接的答案中,它说:

FileInputStream.read() will evaluate the 1 as a byte, and return its value: 49. Scanner.nextByte() will read the 1 and try to evaluate it as an integer regular expression of radix 10, and give you: 1.

FileInputStream.read() will evaluate the a as a byte, and return its value: 97. Scanner.nextByte() will read the a and try to evaluate it as an integer regular expression of radix 10, and throw a java.util.InputMismatchException.

但我不明白它们的实际含义。你能用简单的语言和更清晰的例子解释这些词吗?我查看了ASCII表,字符1对应49。FileInputStream.read()返回49的原因是因为这个吗?

我完全困惑了。请用简单的话解释一下。

最佳答案

文件包含字节。 FileInputStream 读取这些字节。因此,如果文件包含一个值为 49 的字节,stream.read() 将返回 49。如果文件包含两个相同的字节 49,则调用 read() 两次将返回 49,然后返回 49。

像“a”、“1”或“Z”这样的字符可以存储在文件中。要存储在文件中,它们首先必须转换为字节,因为这就是文件所包含的内容。有多种方法(称为“字符编码”)将字符转换为字节。其中一些(如 ASCII、ISO-8859-1 或 UTF-8)将字符“1”转换为字节 49。

扫描仪从文件中读取字符。因此它将文件中的字节转换为字符(使用字符编码,但方向相反:从字节到字符)。某些字符序列形成十进制数字,例如“123”、“-5265”或“1”。有些则不然,比如“abc”。

当您在扫描仪上调用 nextByte() 时,您要求扫描仪读取下一个字符序列(直到下一个空格,或者如果没有空格则直到文件末尾) ,然后检查该字符序列是否表示有效的十进制数,并检查该十进制数是否适合一个字节(即是 -128 到 127 之间的数字)。如果是,则将字符序列解析为十进制数,存储为字节,然后返回。

因此,如果文件两次包含字节 49,则 nextByte() 读取和解析的字符序列将为“11”,它将转换为字节 11。

关于java - fileInputStream 和 Scanner 类之间差异背后的逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30963227/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com