【java】BufferedReader的问题
java吧
全部回复
仅看楼主
level 1
一见穿心 楼主
下面是我写的一个测试程序,如果不把Input1.close();屏蔽调的话,就无法输入Input2,报的错误是:java.io.IOException: Stream closedat 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);}}
2007年04月26日 16点04分 1
level 1
Input1.close();//如果屏蔽该句则可以输入Input2 把这含注释掉不就行了
2007年04月27日 04点04分 2
level 1
一见穿心 楼主
晕!楼上的回答不就等于没有回答吗?呵呵!不过我已经知道为什么了!呵呵!
2007年04月27日 12点04分 3
level 0
那你就说出来是为什么啊?你这样,还能有人以后还帮你啊?
2007年05月12日 02点05分 4
level 1
一见穿心 楼主
呵呵!忘记说是为什么了!以下是高人给我的答案: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已经关闭掉,所以...
2007年05月29日 12点05分 5
level 0
请说清楚一点,偶还是有点不明白System.in 是一个没有包装,未经加工的printStream。所以在使用前要对他进行包装!可是input1与input2是分开的呀!请问下第一个System.in是怎么启用的?难道第二个input2中的System.in不能是重新开始吗?
2007年05月29日 15点05分 6
level 1
一见穿心 楼主
System.in就是最原始的东西,Input1和Input2只是他被装饰后的外表,所以程序中的Input1和Input2的实质上都是System.in。调用Input1.close(),会自动调用Input1的实质System.in.close(),所以对于Input2来说他的实质System.in已经关闭掉,所以... 我想这就是关键吧!呵呵!
2007年06月09日 08点06分 9
level 0
你的那个不关闭就行了嘛。
//Input1.close();
//Input2.close();
2009年03月19日 13点03分 10
level 1
回复:10楼 真**,我实在看不下去了
2010年11月11日 16点11分 11
level 1
回复:10楼人家那是手动释放资源,考虑安全性,晕死了
2010年11月11日 16点11分 12
level 1
回复:5楼请问楼主,如果两个不同函数之间均定义了BufferedReader,而函数的调用是有顺序的,他们两者是在最后一个函数被调用后关掉就可以了还是两者都要关掉?
2010年11月11日 16点11分 13
level 1
我是一个新手给你一个建议:你不关闭Input1看看
2011年04月12日 01点04分 14
level 1
在外部申明新建inputStream
2014年11月11日 03点11分 15
1