Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么BufferedReader::readLine在EOF处挂起?_Java_File Io - Fatal编程技术网

Java 为什么BufferedReader::readLine在EOF处挂起?

Java 为什么BufferedReader::readLine在EOF处挂起?,java,file-io,Java,File Io,我有一些Java8代码试图将文件内容(包括换行符)读入一个字符串;以下是勇气: static private void fn( BufferedReader reader ) throws IOException { StringBuilder builder = new StringBuilder( 1000000 ); String line = null; while ( ( line = reader.readLine() ) != null ) {

我有一些Java8代码试图将文件内容(包括换行符)读入一个字符串;以下是勇气:

static private void fn( BufferedReader reader ) throws IOException {
    StringBuilder builder = new StringBuilder( 1000000 );
    String line = null;
    while ( ( line = reader.readLine() ) != null ) {
        builder.append( line ).append( '\n' );
        System.err.println( line );
    }
    String text = builder.toString();
    ...
}

public static void main(String[] args) throws IOException {
    BufferedReader reader = new BufferedReader( new InputStreamReader( System.in ) );
    fn( reader );
}
我在Eclipse中的运行配置下运行它,该配置重定向
系统。在
中,从一个文件(以EOF结尾),print语句确认这些行确实正在读取,但一旦读取超过最后一行,它将挂起在Eclipse调试器中


我没有以这种方式读取其他文件的问题;为什么是现在?

值得一提的是,如果您使用的是Java 11或更高版本,您可以使用该方法。与从文件读取不同,System.in仍然可以接收更多的字节发送给您的阅读器。您可以使用DataFetcher:@ControlAltDel中的回调模式来克服这一问题,因为
系统中的
被重定向到从文件读取,难道不应该到达流的末尾吗?或者,此设置是否允许用户向系统输入将看到和读取的文件写入更多内容?@Slaw我认为情况不是system.in被重定向到从文件读取,而是文件内容通过管道传输到system.inI,通过在文件本身显式打开BufferedReader解决了我的问题,而不是重定向到
系统。在
中,仍然不理解发生了什么,但理解可能被高估。