如下代碼,運行時報Stream closed錯, 把bs.close();注釋了正常,每次循環不能初始化流麼?
import java.io.*;
public class Test{
public static void main(String[] args) {
try{
while(true){
BufferedReader bs = new BufferedReader(new InputStreamReader(System.in));
System.out.println(bs.readLine());
bs.close();
}
}catch(IOException e){
e.printStackTrace();
}
}
}
舉個例子
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已經關閉掉