开发者社区> 问答> 正文

一个关于IO流问题

有一个IO流close(),其他流是不是也就不能用这个资源了?
比如在多个类里用了Scanner键盘输入,有一个Scanner实例close(),其他的实例就不能再扫描键盘输入了

展开
收起
蛮大人123 2016-02-25 11:08:24 1875 0
1 条回答
写回答
取消 提交回答
  • 我说我不帅他们就打我,还说我虚伪

    首先Scanner类默认实现是不支持多线程的,另外你的测试代码是有问题的
    import java.util.*;
    public class ScannerTest{
    public static void main(String[] args){
    Scanner sc = new Scanner(System.in);
    Scanner qwe = new Scanner(System.in);
    sc.close();
    //加上这句
    qwe.nextLine();
    while(qwe.hasNext()){
    System.out.println(qwe.next());
    }
    }
    }
    经测试报了一个NoSuchElementException,通过调试得知。Scanner对象里有一个source属性,这个可以理解为System.in,是一种资源,source下
    有个bufferInputStream。发现sc.close()执行后,qwe的bufferInputStream为null,因此才报了上面的异常。
    可以得出,在一个线程中,如果有多个Scanner对象,一旦有某个scanner对象执行了close方法,其他对象也就无法正常使用了.
    不过可以用多线程的方法,来实现针对同一资源,可以同时打开多个IO流。这块自己谷歌。

    2019-07-17 18:47:18
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载