首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么read ()方法在EOF处返回-1?

为什么read ()方法在EOF处返回-1?
EN

Stack Overflow用户
提问于 2017-01-10 03:48:11
回答 2查看 1.7K关注 0票数 0

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

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

而且,据我所知,EOF的ASCII代码是26

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-10 05:02:24

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

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

这是InputStream.read()的真正定义.如javadoc中所定义的那样

"public abstract int read() throws IOException 从输入流读取下一个字节的数据。在0到255范围内,值字节作为int返回。如果由于到达流的末尾而没有可用字节,则返回值-1。“

请注意,没有提到ASCII。

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

实际上,没有ASCII字符表示EOF。代码26 (CTRL)是ASCII的子字符.它在键盘输入中用于表示Windows上的EOF,但在其他上下文中则不使用。实际上,在Mac和Linux代码4(CTRL)上就有这个目的。

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

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

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

如果文件是空的(没有数据),那么NUL字符是否存在?

NUL字符不表示空文件,也不表示文件的结尾。

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

票数 2
EN

Stack Overflow用户

发布于 2017-01-10 04:07:52

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41560812

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档