2 u013538596 u013538596 于 2016.04.11 17:03 提问

java 输入流的关闭问题

如下代码,运行时报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();
        }
    }
}

3个回答

u010030637
u010030637   2016.04.11 17:28
已采纳

举个例子
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已经关闭掉

u013538596
u013538596 懂了,谢谢!
2 年多之前 回复
CSDNXIAOD
CSDNXIAOD   2016.04.11 17:13

Java输入流
java使用两个scanner,关闭输入流
C++中输入流的问题
----------------------biu~biu~biu~~~在下问答机器人小D,这是我依靠自己的聪明才智给出的答案,如果不正确,你来咬我啊!

wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.04.11 17:36

必须处理完之后再执行流关闭操作的啊。你的while处理应该是循环读取文件内容才可以,而不是while(true)这个是死循环的啦。
而且流初始化一次就可以了,应该放在while循环外面进行才对,修正代码如下:

    public static void main(String[] args) {
        try{
            BufferedReader bs = new BufferedReader(new InputStreamReader(System.in));
            String value = bs.readLine();
            while(value!=null&&!"".equals(value)){
                System.out.println(value);
                value = bs.readLine();
            }
            bs.close();
        }catch(IOException e){
            e.printStackTrace();
        }
    }

当用户什么都不输入直接按下Enter键时,while循环结束。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
Java学习提要——输入流与输出流基本操作
能对文件进行内容操作的只有两种途径“字符流”和“字节流” 1.通过File类定义一个要操作的文件的路径; //如果操作不是文件,那么没有这一步 2.通过字节流或字符流的子类对象为父类对象实例化; 3.进行数据的读(输入),写(输出)操作; 4.数据流属于资源操作,资源操作必须关闭 java.io包 定义的流 字节流(JDK1.0)
java使用两个scanner,关闭输入流
今天写代码突然想着用两个输入流有什么效果import java.util.Scanner;public class ScannerTest { public static void main(String[] args) { Scanner input1 = new Scanner(System.in); Scanner input2 = new Scanner
[Java开发之路](8)输入流和输出流
1. Java流的分类 按流向分: 输入流: 可以从其中读入一个字节序列的对象称作输入流。 输出流: 可以向其中写入一个字节序列的对象称作输出流。 这些字节序列的来源地和目的地可以是文件,而且通常都是文件,但是也可以是网络连接,甚至是内存块。抽象类InputStream和OutputStream构成了输入和输出类层结构的基础。 按数据传输单位分: 字节流:
java socket 以及 流 关闭的问题
首先我一下几个提出问题:稍后再做出解答。     问题一:A如果仅仅将输入流关闭(inA.close()),对A与B之间的连接是否有影响?                   A能否再次获得输入流(inA = socketA.getInputStream())?                   是否A还可以发送数据,因为其输出流没有关闭?      问题二:A如果仅仅将
Java 关于处理运行超时的输入流优化方法
class Reader { static BufferedReader reader; static StringTokenizer tokenizer; static void init(InputStream input) { reader = new BufferedReader(new InputStreamReader(input)); ...
java中IO流中的对象操作流(2)——解决对象输入流读取对象出现异常的问题
解决对象输入流读取对象出现异常的问题 package com.itheima_07; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.Object
【JAVA】文件输入流 FileInputStream
文件输入流 FileInputStream 博客分类: java IO Java.    FileInputStream 类从文件中读取数据。它有以下构造方法:     FileInputStream(File file)--------参数file指定文件的数据源     FileInputStream(String name)-------- 参数name指定文件数据源。在参数nam
java字节输入流InputStream详解
-------------------------java字节输入流InputStream详解--------------------- 因为InputStream是抽象类,我们要学习的是它的子类。 构造器      FileInputStream(File file)           通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的 File...
处理request.getInputStream()输入流只能读取一次问题
一般我们会在InterceptorAdapter拦截器中对请求进行验证正常普通接口请求,request.getParameter()可以获取,能多次读取如果我们的接口是用@RequestBody来接受数据,那么我们在拦截器中需要读取request的输入流  ,因为 ServletRequest中getReader()和getInputStream()只能调用一次这样就会导致controller 无...
java处理Process输入流阻塞问题
多时候,我们需要调用系统命令来做些处理。比如,在程序中ping设备是否能连接,执行数据库的自动备份,以及程序的重启。这时候我们必须要使用Process类来完成这些功能。     一般情况下,我们都会将命令执行过程中的信息输出,以便检查问题。但有时候我们还需知道这个执行的进程在什么时候结束,因为不仅要知道结束了,还要知道该进程完成时返回的结果。     可能会说,这些不都是API已经给提供好