Java 为什么read()方法在EOF时返回-1?

Java 为什么read()方法在EOF时返回-1?,java,ascii,eof,Java,Ascii,Eof,我正在学习java.io。在read()方法文档中,我看到了以下定义: read()方法返回输入字节的ASCII码(0-255),并在文件末尾返回-1 此外,据我所知,EOF的ASCII码是26 那么,为什么对于EOF,read()方法返回-1,而不是26。那么,返回值-1是什么意思 还有一个问题:空字符(即NUL)是什么,ASCII码:0,用于什么?如果文件为空(即没有数据),NUL字符是否存在?从文件(在“现代文件”系统上)读取的字节值的有效范围为8位(也就是说,它不一定是ascii编码的,

我正在学习java.io。在
read()
方法文档中,我看到了以下定义:

read()方法返回输入字节的ASCII码(0-255),并在文件末尾返回-1

此外,据我所知,EOF的ASCII码是
26

那么,为什么对于EOF,
read()
方法返回
-1
,而不是
26
。那么,返回值
-1
是什么意思


还有一个问题:空字符(即
NUL
)是什么,ASCII码:0,用于什么?如果文件为空(即没有数据),NUL字符是否存在?

从文件(在“现代文件”系统上)读取的
字节
值的有效范围为8位(也就是说,它不一定是ascii编码的,可能是二进制的)。由于可能会返回从
0
255
的任何值,因此有必要以某种方式指示文件的结尾。在处理小文件时,您可能更喜欢(通常)中可用的类和方法,以及(特别)中可用的读取方法。

从文件(在“现代文件”系统上)读取的
字节的有效范围是8位(也就是说,它不一定是ascii编码的,它可能是二进制的)。由于可能会返回从
0
255
的任何值,因此有必要以某种方式指示文件的结尾。在处理小文件时,您可能更喜欢(通常)中提供的类和方法以及(特别)中提供的读取方法

我看到了定义:“read()方法返回输入字节(0-255)的ASCII码,并在文件末尾返回-1”

这个定义是不正确的。
read()
方法不返回ASCII。它返回字节,不对其进行解释。对于二进制文件,它们肯定不是ASCII码

以下是
InputStream.read()
的真正定义。。。如本规范所定义:

public abstract int read()抛出IOException

从输入流读取数据的下一个字节。值字节作为0到255范围内的int返回。如果由于到达流的结尾而没有可用的字节,则返回值-1。”

请注意,这里没有提到ASCII


此外,正如我所知,EOF的ASCII码是26

实际上,没有表示EOF的ASCII字符。代码26(CTRL-Z)是ASCII子字符。它用于键盘输入,表示Windows上的EOF,但不用于其他上下文。事实上,在Mac OS和Linux上,ASCII代码4(CTRL-D)就是为了达到这一目的

无论如何,从0到255的所有无符号字节值都是可能出现在文件中的有效数据值。因此,有必要使用不同的值来表示EOF


还有一个问题:空字符(NUL),ASCII码:0,用于什么

各种各样的事情。实际上,应用程序选择使用它的任何东西

如果文件为空(无数据),NUL字符是否存在

NUL字符不表示空文件或文件的结尾

如果文件没有数据,则其长度将为零。文件长度是文件元数据的一部分,就像文件名、所有者和组、权限、创建时间戳等一样

我看到了定义:“read()方法返回输入字节(0-255)的ASCII码,并在文件末尾返回-1”

这个定义是不正确的。
read()
方法不返回ASCII。它返回字节,不对其进行解释。对于二进制文件,它们肯定不是ASCII码

以下是
InputStream.read()
的真正定义。。。如本规范所定义:

public abstract int read()抛出IOException

从输入流读取数据的下一个字节。值字节作为0到255范围内的int返回。如果由于到达流的结尾而没有可用的字节,则返回值-1。”

请注意,这里没有提到ASCII


此外,正如我所知,EOF的ASCII码是26

实际上,没有表示EOF的ASCII字符。代码26(CTRL-Z)是ASCII子字符。它用于键盘输入,表示Windows上的EOF,但不用于其他上下文。事实上,在Mac OS和Linux上,ASCII代码4(CTRL-D)就是为了达到这一目的

无论如何,从0到255的所有无符号字节值都是可能出现在文件中的有效数据值。因此,有必要使用不同的值来表示EOF


还有一个问题:空字符(NUL),ASCII码:0,用于什么

各种各样的事情。实际上,应用程序选择使用它的任何东西

如果文件为空(无数据),NUL字符是否存在

NUL字符不表示空文件或文件的结尾


如果文件没有数据,则其长度将为零。文件长度是文件元数据的一部分,就像文件名、所有者和组、权限、创建时间戳等一样。

什么
read()
方法?哪一类?EOF的
字符是。。。有问题的它实际上不再用于标记文件的结束。否则,如果你需要26号怎么办?你在哪里找到的报价?它肯定不是的javadoc,因为它读取的是字节,而不是ASCII字符。请链接到您的源代码,因为它可能是伪造的/有缺陷的。什么
read()
方法?哪一类?EOF的
字符是。。。有问题的它实际上不再用于标记文件的结束。否则,如果你需要26号怎么办?你在哪里找到的报价?它肯定不是的javadoc,因为它读取的是字节,而不是ASCII字符。请链接到你的来源,因为它可能是假的/有缺陷的。