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

时间:2017-07-09 14:08:26

标签: java

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

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

1 个答案:

答案 0 :(得分:2)

  

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

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

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