看看我下面的一段代码public class Test1 { public static void main(String[] args) throws IOException {

for (int i = 0; i < 5; i++) {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String readLine = br.readLine();
System.out.println(readLine);
br.close();
}

}
}每次我关闭一个流,在下次循环时再新建一个流,这样为什么会报出“流已关闭”的错误??求大神解答。

解决方案 »

  1.   

    public static void main(String[] args) throws IOException {
    BufferedReader br = null;
    for (int i = 0; i < 5; i++) {
    br = new BufferedReader(new InputStreamReader(
    System.in));
    String readLine = br.readLine();
    System.out.println(readLine);

    }
    br.close();
    }
    你可以试试这个
      

  2.   

    因为流的关闭是级联的。你把br close的时候System.in也被close所以你第一次是成功的后面都会报流已被关闭的异常
      

  3.   

    不懂,请3楼赐教!System.in的特性是什么样的,它什么时候打开,什么时候会被关闭。如果想不报错,怎么样重新打开?
      

  4.   

    重新打开是不可能的但是可以用System.setIn(InputStream in);用这个方法设置一个System.in其实他内部是调用jvm的本地方法
      

  5.   


    3楼的意思我可以理解成这样两点吗:
    1.流的关闭是级联的,也就是如果外层的BufferedReader这个流关闭了,那么它的内层流InputStream(System.in)也要被同时关闭;
    2.System.in这个流输入源关闭之后再次用new InputStream(System.in)就打不开了??请三楼赐教!
      

  6.   

    我不是说了System类暴露了一个setIn方法是可以用来设置System.in的也就是说你关闭了之后要在用System.setIn放入一个新的的InputStream给System.in
      

  7.   

    既然是标准输入流,干嘛关闭呢?BufferedReader是内存缓冲,不用关闭也可以吧!
    public class Test1 {       public static void main(String[] args) throws IOException {                   
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));             
    for (int i = 0; i < 5; i++) {             String readLine = br.readLine();             System.out.println(readLine);             }               } }  
      

  8.   


    能给我解释下为什么重新new一个流也不行的呢,最好能用形象的理解方式,确实是不理解.
      

  9.   

    不论你new 多少个BufferedReader这些都是外层的缓冲流。也叫高级流。但是实际上底层用的还是System.in。
    这个流被关闭了。你new 多少个BufferedReader有什么用。我上面就说了这个System.in是System类被加载的时候就分配好的final变量。所以你System.in已经被关闭了。你外层的流在怎么new也是无用,因为底层的流被关闭了。
      

  10.   


    继续追问,3楼别烦我哈。我能把System.in看成还在InputStream更里面的一层流,连接计算机输入设备的一种类流。(BufferedReader是处理流,InputStream是节点流,然后System.in是更进的一层流)
      

  11.   

    InputStream是字节流的基本入口System.in也是他的一个实例。BufferedReader是带缓冲的字符流。字符流与字节流之间通过套接流InputStreamReader来进行套接