对于从STDIN
读取输入,我总是使用Scanner
对象。最近我读了BufferedInputStream
here表示BufferedInputStream是读取输入的最快方式。在Scanner
我们有各种方法(读integer
nextInt()
,读byte nextByte()
,读string next()
等) 目前我正在阅读一些字符串(最大100000个字符)和一些整数。根据这些整数,我进一步运行我的for循环,该输入来自STDIN
。下面是我用,直到NOW-使用BufferedInputStream在扫描仪的就位时面临困难
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()
读取输入。那么如何区分输入?有人可以写下相当于Scanner
的代码BufferedInputStream
吗?我应该使用StringTokenizer
类来标记我从read()
获得的数据吗?这不会使整个东西(从STDIN
读取输入)比Scanner
慢?
我相信BufferedReader包装了BufferedInputStream并提供了这些有用的方法。但是,如果您从键盘上读取数据,速度就不值得关注,因为即使是最快速的人类输入,其速度也会比最粗略的读取器慢几个数量级。在这种情况下,我(个人)认为使用Scanner的简单性超过了使用缓冲读取器带来的任何想象的性能收益。 – jpm 2012-03-27 16:55:49
@jpm:请不要混淆键盘。这可以是任何'STDIN'来源。 – 2012-03-27 17:10:16