Java 为什么read()方法在EOF时返回-1?
我正在学习java.io。在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编码的,
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字符。请链接到你的来源,因为它可能是假的/有缺陷的。