Java 为什么BufferedReader::readLine在EOF处挂起?
我有一些Java8代码试图将文件内容(包括换行符)读入一个字符串;以下是勇气: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 ) {
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解决了我的问题,而不是重定向到系统。在
中,仍然不理解发生了什么,但理解可能被高估。