【java】BufferedReader的问题

下面是我写的一个测试程序,如果不把Input1.close();屏蔽调的话,就无法输入Input2,报的错误是:
java.io.IOException: Stream closed
at java.io.BufferedInputStream.getBufIfOpen(Unknown Source)
at java.io.BufferedInputStream.read(Unknown Source)
at sun.nio.cs.StreamDecoder$CharsetSD.readBytes(Unknown Source)
at sun.nio.cs.StreamDecoder$CharsetSD.implRead(Unknown Source)
at sun.nio.cs.StreamDecoder.read(Unknown Source)
at java.io.InputStreamReader.read(Unknown Source)
at java.io.BufferedReader.fill(Unknown Source)
at java.io.BufferedReader.readLine(Unknown Source)
at java.io.BufferedReader.readLine(Unknown Source)
at test.main(test.java:33)
请问这是怎么回事啊?我第一个BufferedReader使用完后关闭,然后第二个BufferedReader是重新申请的啊?为什么第一个关闭了,第二个会提示Stream closed呢?
以下是我的程序test.java,请了解的朋友给解释一下,谢谢!
import java.io.*;

public class test {
static int num;
static String str;
public static void main(String[] args) {
try{
System.out.print("Input number: ");
BufferedReader Input1 = new BufferedReader(new InputStreamReader(System.in));
num = Integer.parseInt(Input1.readLine());
Input1.close();//如果屏蔽该句则可以输入Input2
}
catch(IOException e1){
e1.printStackTrace();
}

try{
System.out.print("Input string: ");
BufferedReader Input2 = new BufferedReader(new InputStreamReader(System.in));
str = Input2.readLine();
Input2.close();
}
catch(IOException e2){
e2.printStackTrace();
}

System.out.println("number = " + num + "\nString = " + str);
}
}

BufferedReader Input1 = new BufferedReader(new InputStreamReader(System.in));
BufferedReader Input2 = new BufferedReader(new InputStreamReader(System.in));
这两句话中的Input1和Input2都是由System.in封装而来。这是设计模式中的装饰模式的应用,顾名思义,装饰模式就是对最原始的东西进行装饰,只改变了外表,但实质并没有改变。System.in就是最原始的东西,Input1和Input2只是他被装饰后的外表,所以程序中的Input1和Input2的实质上都是System.in。调用Input1.close(),会自动调用Input1的实质System.in.close(),所以对于Input2来说他的实质System.in已经关闭掉,所以...
温馨提示:答案为网友推荐,仅供参考
第1个回答  2007-04-27
你关闭流最好做个finally
第2个回答  2007-04-27
高手 但是我不明白为什么要关掉流呢
相似回答