在Scanner中使用BufferedInputStream时遇到困难

时间:2012-03-27 16:50:55

标签: java stdin java.util.scanner stringtokenizer bufferedinputstream

为了从STDIN读取输入,我总是使用Scanner个对象。最近我读到了BufferedInputStream here,BufferedInputStream是读取输入的最快方式。在Scanner我们有各种方法(阅读integer nextInt(),阅读byte nextByte(),阅读string next()等。) 目前我正在阅读一些字符串(最多100000个字符)和一些整数。根据这些整数,我进一步运行我的for循环,它从STDIN获取输入。下面是我到目前为止使用的代码片段 -

    Scanner sc = new Scanner(System.in);
    int numOfStr = sc.nextInt();
    String inputStr[] = new String[numOfStr];
        for (int i = 0; i < numOfStr; i++) {
                inputStr[i] = sc.next();
        }
    }

但是对于BufferedInputStream,我们只有read()来读取输入。那么我如何区分输入?有人可以写下相当于上述BufferedInputStream的{​​{1}}代码吗?我应该使用Scanner类来标记我从StringTokenizer获得的数据吗?这不会使整个内容(从read()读取输入)比STDIN更慢吗?

2 个答案:

答案 0 :(得分:1)

BufferedInputStream不解析任何数据,只读取数据。您可以将缓冲的阅读器传递到扫描仪类并从那里解析它。

答案 1 :(得分:0)

查看Java教程中的chapter on streams。它描述了不同类型的流,它们的用途和用法。

但是,我不太明白为什么在读取用户输入时读取操作必须很快。与用于从键盘读取输入的方法相比,用户输入的速度要慢得多(数量级要慢)。