由以下的测试可以看出,使用BufferedReader和BufferedInputStream速度接近,可能是因为数据量比较小,但是它们的速度均比Scanner要快很多。
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
public class FindFastest {
public static void main(String[] args) {
FindFastest ff = new FindFastest();
// 测试数据
// 苹果公司计划于9月9日召开新闻发布会,届时苹果将发布新一代iPhone。而苹果iPhone发布会一般于9月初至9月中旬召开,这次传闻的召开时间与近几年基本吻合。
ff.testScanner();
// 测试结果如下:
// 苹果公司计划于9月9日召开新闻发布会,届时苹果将发布新一代iPhone。而苹果iPhone发布会一般于9月初至9月中旬召开,这次传闻的召开时间与近几年基本吻合。
// 使用Scanner读取耗时:252微秒
// 苹果公司计划于9月9日召开新闻发布会,届时苹果将发布新一代iPhone。而苹果iPhone发布会一般于9月初至9月中旬召开,这次传闻的召开时间与近几年基本吻合。
// 使用Scanner读取耗时:230微秒
// 苹果公司计划于9月9日召开新闻发布会,届时苹果将发布新一代iPhone。而苹果iPhone发布会一般于9月初至9月中旬召开,这次传闻的召开时间与近几年基本吻合。
// 使用Scanner读取耗时:271微秒
// ff.testScannerWithBufferedInputStream();
// 测试结果如下:
// 苹果公司计划于9月9日召开新闻发布会,届时苹果将发布新一代iPhone。而苹果iPhone发布会一般于9月初至9月中旬召开,这次传闻的召开时间与近几年基本吻合。
// 使用带BufferedInputStream的Scanner读取耗时:75微秒
// 苹果公司计划于9月9日召开新闻发布会,届时苹果将发布新一代iPhone。而苹果iPhone发布会一般于9月初至9月中旬召开,这次传闻的召开时间与近几年基本吻合。
// 使用带BufferedInputStream的Scanner读取耗时:7微秒
// 苹果公司计划于9月9日召开新闻发布会,届时苹果将发布新一代iPhone。而苹果iPhone发布会一般于9月初至9月中旬召开,这次传闻的召开时间与近几年基本吻合。
// 使用带BufferedInputStream的Scanner读取耗时:5微秒
// ff.testBufferedReader();
// 测试结果如下:
// 苹果公司计划于9月9日召开新闻发布会,届时苹果将发布新一代iPhone。而苹果iPhone发布会一般于9月初至9月中旬召开,这次传闻的召开时间与近几年基本吻合。
// 使用BufferedReader读取耗时:95微秒
// 苹果公司计划于9月9日召开新闻发布会,届时苹果将发布新一代iPhone。而苹果iPhone发布会一般于9月初至9月中旬召开,这次传闻的召开时间与近几年基本吻合。
// 使用BufferedReader读取耗时:3微秒
// 苹果公司计划于9月9日召开新闻发布会,届时苹果将发布新一代iPhone。而苹果iPhone发布会一般于9月初至9月中旬召开,这次传闻的召开时间与近几年基本吻合。
// 使用BufferedReader读取耗时:3微秒
}
public void testScanner() {
Scanner in = new Scanner(System.in);
while (in.hasNext()) {
long start = System.nanoTime();
in.next();
// 返回用第二个参数指定基数表示的第一个参数的字符串表示形式。
// System.out.println(Integer.toString(in.nextInt(), 10));
long end = System.nanoTime();
System.out.println("使用Scanner读取耗时:" + (end - start) / 1000 + "微秒");
}
}
public void testScannerWithBufferedInputStream() {
Scanner in = new Scanner(new BufferedInputStream(System.in));
while (in.hasNext()) {
in.next();
long start = System.nanoTime();
System.out.println("使用带BufferedInputStream的Scanner读取耗时:" + (System.nanoTime() - start) / 1000 + "微秒");
}
}
public void testBufferedReader() {
BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
try {
String str = null;
while ((str = buf.readLine()) != null) {
if (!"".equals(str)) {
long start = System.nanoTime();
System.out.println("使用BufferedReader读取耗时:" + (System.nanoTime() - start) / 1000 + "微秒");
}
}
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
/**
*
* @param num
* @param base
* @return 该函数是将十进制数字转化成指定的任意进制的数
*/
public static String baseString(int num, int base) {
String str = "", digit = "0123456789abcdef";
if (num == 0) {
return "";
} else {
str = baseString(num / base, base);
return str + digit.charAt(num % base);
}
}
}