gpt4 book ai didi

java - BufferedReaders 跨类读取 System.in

转载 作者:行者123 更新时间:2023-12-01 13:19:49 24 4
gpt4 key购买 nike

我想知道为什么在使用时出现 java.io.IOException: Stream Closed 错误

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

分两个不同的类(class)。

设置如下。

public class SomeClass{

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//br.readSomeStuff
br.close();

new SomeOtherClass(); //defo not passing the br along to the new class!

}
public class SomeOtherClass{

public SomeOtherClass(){
method():
}

private void method(){
BufferedReader br = new BufferedReader(new InputStreamReader(System.in))
br.readLine();
// results into an IOEXCEPTION Stream close
}

}

当我在创建另一个类后关闭第一个类中的 BufferedReader 时,问题就消失了。我不明白为什么这会带来问题。我正在 System.in 上创建一个新的 BufferedReader,为什么这可能会导致流关闭错误?

类似问题here 。但没有解释为什么 System.in 由于某种原因被关闭。

提前致谢!

最佳答案

因为当您关闭 BufferedReader 时,所有底层流都将关闭。所有包装流以及从流读取/写入流的类都是这种情况。

这样很方便,您无需遍历已实例化的整个对象集(InputStreamInputStreamReader 以及最后的BufferedReader)并关闭所有它们。

一个简单的测试将证明这一点:

public static void main(String[] args) throws IOException 
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
br.close();

// Will throw IOException
int i = System.in.read();
}

System.in 并不特殊;它是一个输入流。如果底层流是 FileInputStream 而不是 stdin,也会发生同样的事情:

public static void main(String[] args) throws IOException 
{
File f = new File("SomeFileName");
FileInputStream fis = new FileInputStream(f);
BufferedReader br = new BufferedReader(new InputStreamReader(fis));
br.close();

// throw IOException
int i = fis.read();
}

考虑到这些构造函数通常是链接的(就像在您的示例中一样),因此必须保留并关闭每个构造函数会非常麻烦。

想象一下每次您想要使用流时都必须执行以下操作:

public static void main(String[] args) throws IOException 
{
File f = new File("SomeFileName");
FileInputStream fis = new FileInputStream(f);
InputStreamReader isr = new InputStreamReader(fis);
BufferedReader br = new BufferedReader(irs);

// Use the BufferedReader

br.close();
isr.close();
fis.close();

}

关于java - BufferedReaders 跨类读取 System.in,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22136137/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com