使用BufferedInputStream代替Scanner时遇到困难

2019年1月22日 17点热度 0条评论

为了从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等效的
Scanner代码吗?我应该使用
StringTokenizer类对从
read()获取的数据进行标记吗?这会不会使整个内容(从
STDIN读取输入内容)比
Scanner更慢?

解决方案如下:

BufferedInputStream不会解析任何数据,而只是读取数据。您可以将缓冲的读取器传递到扫描器类中,然后从那里进行解析。