我正在学习java.io.在read ()
方法文档中,我看到了定义:
read()方法返回输入字节的ASCII码(0-255)并在文件末尾返回-1
此外,据我所知,EOF的ASCII码是26
。
那么,为什么read()
方法会为EOF返回-1
而不是26
。而且,返回值-1
是什么意思?
还有一个问题:什么是空字符(即NUL
),ASCII代码:0,用于?如果文件是空白的(即没有数据),NUL字符是否存在?
答案 0 :(得分:2)
我看到了定义:“read()方法返回输入字节的ASCII码(0-255)并在文件末尾返回-1”
该定义不正确。 read()
方法不返回ASCII。它返回字节,不对它们进行解释。对于二进制文件,它们绝对不是ASCII代码。
以下InputStream.read()
中定义的public abstract int read() throws IOException
的真实定义:
“{{1}}
从输入流中读取下一个数据字节。值字节作为int返回,范围为0到255.如果没有字节可用,因为已到达流的末尾,则返回值-1。“
请注意,没有提及ASCII。
此外,据我所知,EOF的ASCII码是26.
实际上,没有ASCII字符表示EOF。代码26(CTRL-Z)是ASCII SUB字符。在键盘输入中使用表示Windows上的EOF,但在其他上下文中则不行。实际上,在Mac OS和Linux上,ASCII码4(CTRL-D)就是为了这个目的。
无论如何,0到255之间的所有无符号字节值都是可能出现在文件中的有效数据值。因为有必要使用不同的值来表示EOF。
还有一个问题:空字符(NUL),ASCII代码:0,用于什么?
各种各样的事情。实际上,应用程序选择使用它的任何内容。
如果文件是空白的(没有数据),NUL字符是否存在?
NUL字符不代表空文件或文件末尾。
如果文件没有数据,则其长度为零。文件长度是文件元数据的一部分,就像文件名,文件所有者和组,权限,创建时间戳等一样。
答案 1 :(得分:1)