测试三种控制台读取方法的速度快慢

来源:互联网 发布:橡胶木 知乎 编辑:程序博客网 时间:2024/05/16 08:51

由以下的测试可以看出,使用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 blocke1.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);}}}



0 0