Java InputStream.read()意外返回字节数,而不是-1

Java InputStream.read()意外返回字节数,而不是-1,java,Java,当我在Eclipse中运行read()并在控制台上输入chars,然后输入enter时,返回的值是输入的字节数,而不是-1,尽管我输入控制台的字符串以enter终止,据我所知,这会生成流结束条件 我能想到的唯一解释是,输入控制台本身的信号流结束,而不被read()解释为EOF 我输入控制台的字符串以enter终止,据我所知,enter生成流结束条件 否,按Enter键不会生成流结束条件。根据您的操作系统,它通常是Ctrl+d或Ctrl+z 此外,read将返回它在第一次调用时读取的字节数,即使您

当我在Eclipse中运行
read()
并在控制台上输入chars,然后输入enter时,返回的值是输入的字节数,而不是
-1
,尽管我输入控制台的字符串以enter终止,据我所知,这会生成流结束条件

我能想到的唯一解释是,输入控制台本身的信号流结束,而不被
read()
解释为EOF

我输入控制台的字符串以enter终止,据我所知,enter生成流结束条件

否,按Enter键不会生成流结束条件。根据您的操作系统,它通常是Ctrl+d或Ctrl+z


此外,
read
将返回它在第一次调用时读取的字节数,即使您结束控制台的流。当流已经关闭时,第二个调用将产生
-1
。此行为是正确的,否则您的程序将不会在流终止之前接收控制台上输入的数据的“尾端”。

“输入”(我假设您指的是换行符)不会以任何方式结束流。但一本非常著名的Java书籍的作者说它会,这就是我提到它的原因!我不知道你指的是什么报价;但听起来你好像误解了它说的话。嗨。我不是要固执什么的,只是想利用一切可能的解释。难道这不可能是某种断断续续的流结束,即控制台中的一大块输入已经填满,缓冲处理完成了吗?这与read()消化的流的最终结尾不同,这就结束了流?我不知道。。你认为呢?@searcherr在从缓冲区中获取所有输入之前,你不会得到一个负数。