br.read() 如何在读取字符串结束时给出 -1 或 br.read() 究竟是如何工作的?

Posted

技术标签:

【中文标题】br.read() 如何在读取字符串结束时给出 -1 或 br.read() 究竟是如何工作的?【英文标题】:How is br.read() giving out -1 at the end of reading the string or How exactly does the br.read() works? 【发布时间】:2021-09-16 06:14:44 【问题描述】:

这是一个示例程序作为缓冲阅读器的示例,我了解了大部分内容并理解了这样一个事实,即当 (br.read()=-1) 时 while 循环执行停止但不明白为什么会这样?

import java.io.*;  
public class BufferedReaderExample   
    public static void main(String args[])throws Exception    
          FileReader fr=new FileReader("D:\\testout.txt");    
          BufferedReader br=new BufferedReader(fr);    
  
          int i;    
          while((i=br.read())!=-1)    //<<<<I'm talking about this here
            
          System.out.print((char)i);  
            
          br.close();    
          fr.close();    
        
 

【问题讨论】:

因为that's how read is designed to operate,即到达流尾时返回-1。 看一下 Javadoc 就会告诉你。 【参考方案1】:

-1 是一个超出方法返回值正常范围的信号值。它用于表示已到达流尾:

回报: 读取的字符,为 0 到 65535 (0x00-0xffff) 范围内的整数,如果已到达流的末尾,则为 -1

(来自:BufferedReader.read()

简而言之,正如 Federico klez Culloca 在 cmets 中提到的那样,原因是 read() 就是这样设计的。

【讨论】:

以上是关于br.read() 如何在读取字符串结束时给出 -1 或 br.read() 究竟是如何工作的?的主要内容,如果未能解决你的问题,请参考以下文章

当tableview结束显示单元格时如何更改为读取状态?

在 BigQuery 中读取时,未定义行 XXXX、列 xx-xx 处的 JSON 输入意外结束

关于EOF和feof()

如何让fscanf自动在文件读结束时候停止执行

JAVA如何判断输入结束

如何通过 scanf() 读取没有标点符号的字符串?