java  Scanner与BufferedReader读取键盘输入性能比较

      
   

1、Scanner和BufferedReader 性能比较

在java中常见的从键盘获取输入的方式有Scanner和BufferedReader,本文给出两种方式读取输入的性能比较。   
测试代码如下:  
package com.algorithm;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner; /**
*
* @author Wennian
* @function 测试2种输入流方式的性能
*/
public class InputTest { public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
InputTest inputTest = new InputTest(); inputTest.testScanner();
inputTest.testBufferReader(); } public void testScanner(){
Scanner scn = new Scanner(System.in);
String str = scn.next();
long start = System.nanoTime();
while(!str.equals("EOF")){
str = scn.next();
}
long end = System.nanoTime();
System.out.println("testScanner:"+(end - start)/1000000 + "ms"); } public void testBufferReader() throws IOException{
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
String str = bf.readLine();
long start = System.nanoTime();
while(!str.equals("EOF")){
str = bf.readLine();
}
long end = System.nanoTime();
System.out.println("testBufferReader:"+(end - start)/1000000 + "ms"); } }
</span>

构造输入流,大约360KB的数据,由于JVM和系统等其他原因,测试时间每次不同,但测试结果一致,即:每一测试BufferedReader的时间都要小于Scanner

//----------360KB数据的结果-----------//
testScanner:112ms
testBufferReader:14ms

testScanner:145ms
testBufferReader:10ms

testScanner:90ms
testBufferReader:12ms

//--------1MB数据的结果----------//
testScanner:220ms
testBufferReader:27ms

从上面测试结果来看,Scanner的平均耗时是BufferedReader的10倍左右.

2、Scanner和BufferedReader的区别

在命令行模式下要输入数据至程序中时,我们可以使用标准输入串对象System.in.但是,我们并不经常直接使用它,因为System.in提供的 read方法每次只能读取一个字节的数据,而我们平时所应用的通常是读取一个字符串或者是一个数字,所以read方法所提供的功能,对我们来说并没有太大的用处.

       在Java SE 6中,可以使用Scanner类取得用户的输入,Scanner类位于java.util包中,如果你要使用Scanner取得用户输入的话,要加上 importjava.util.Scanner;这条语句.import的功能是告诉编译器,你将使用java.util包中的Scanner类.

我们来看一个例子:

import java.util.Scanner;
public class TestScanner{
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
System.out.println("请输入一个字符串:");
System.out.println("您输入的字符串是:" + scan.next());
}
}

运行上面的程序,你将会看到你输入的字符串将在下面原样显示出来.

     我们来看看这个程序中每条语句的意思:

     new是创建一个对象,程序中new的意思是创建了一个Scanner类的对象scan.但是在创建Scanner类的对象时,需要用System.in 作为它的参数,也可以将Scanner看作是System.in对象的支持者,System.in取得用户输入的内容后,交给Scanner来作一些处理.

     Scanner类中提供了多个方法:

        next():取得一个字符串;

        nextInt():将取得的字符串转换成int类型的整数;

        nextFloat():将取得的字符串转换成float型;

        nextBoolean():将取得的字符串转换成boolean型;

用Scanner获得用户的输入非常的方便,但是Scanner取得输入的依据是空格符,包括空格键,Tab键和Enter键.当按下这其中的任一键时,Scanner就会返回下一个输入. 当你输入的内容中间包括空格时,显然,使用Scanner就不能完整的获得你输入的字符串.这时候我们可以考虑使用BufferedReader类取得输入.其实在Java SE 1.4及以前的版本中,尚没有提供Scanner方法,我们获得输入时也是使用BufferReader的.

        BufferedReader类位于java.io包中,所以要使用这个类,就要引入java.io这个包:import java.io.BufferedReader. 使用BufferedReader对象的readLine()方法必须处理java.io.IOException异常(Exception).使用BufferedReader来取得输入,理解起来要复杂得多.但是使用这个方法是固定的,每次使用前先如法炮制就可以了.

        BufferedReader buffer = new BufferedReader(new InputStreamReader(System.in));

        String text = buffer.readLine();

        readLine()方法会返回用户在按下Enter键之前的所有字符输入,不包括最后按下的Enter返回字符.

完整的示例程序如下:

import java.io.BufferedReader;
public class TestBufferedReader{
public static void main(String[] args) throws IOException{
BufferedReader buffer = new BufferedReader(new InputStreamReader(System.in));
System.out.println("请输入一串字符串");
String text = buffer.readLine();
System.out.println("您输入的字符串是:" + text);
}
}

参考:http://blog.csdn.net/cankingapp/article/details/8145234


java Scanner与BufferedReader读取键盘输入性能比较的更多相关文章

  1. Python打印到屏幕_读取键盘输入

    Python打印到屏幕_读取键盘输入: print( ): 打印输出括号中的值 print("hello") # hello strs = 'hello' print(" ...

  2. Java基础---Java---IO流-----读取键盘录入、InputStreamReader、转换流、OutputStreamWriter、InputStreamReader

    字符流: FileReader FileWriter BufferedReader BufferedWriter 字节流: FileInputStream FileOutputStream Buffe ...

  3. Java Scanner 类,获取用户输入的值

    Scanner 类使用步骤 1.导入java.util.Scanner import java.util.Scanner; 2.创建Scanner对象 Scanner scan = new Scann ...

  4. java编程基础篇-------> 从键盘输入一位整数,代表月份,编程判断指定月份属于一年中的哪个季度。如果是 12 月、1 月、2 月,就属于冬季。

    从键盘输入一位整数,代表月份,编程判断指定月份属于一年中的哪个季度.如果是 12月.1 月.2 月,就属于冬季:如果是 3 月.4 月.5 月,就属于春季:如果是 6 月.7 月.8 月,就属于夏季: ...

  5. python通过标准输入读取内容,读取键盘输入的内容?接收用户输入?

    需求说明: 在交互式脚本中,需要用户手动输入内容,并对内容进行处理.在这里记录下通过 python的内置函数input()读取标注输入的内容.默认的标准输入是键盘. 操作过程: 1.通过input() ...

  6. 大数据 - Java基础:读取键盘输入的方法

    Java中获取键盘输入值的三种方法 程序编写中,从键盘获取数据是一件非常普通又平常的事 C:scanf() C++:cin() C#:Read().ReadKey().ReadLine() Java没 ...

  7. Java读取键盘输入

    三种方法分别如下: 方法一:从控制台接收一个字符,然后将其打印出来 import java.io.*; public static void main(String [] args) throws I ...

  8. Python读取键盘输入

    Python提供了两个内置函数从标准输入读入一行文本,默认的标准输入是键盘.例如以下: raw_input input raw_input函数 raw_input() 函数从标准输入读取一个行.并返回 ...

  9. Java Scanner 类——获取用户的输入

    创建Scanner对象语法 Scanner scan = new Scanner(System.in); 使用next()获取输入的字符串 import java.util.Scanner; publ ...

随机推荐

  1. Python中作用域的特别之处

    def a(): a = [] def aappend(): a.append(1) aappend() print a def b(): b = 1 def bchange(): b += 1 # ...

  2. SSRS生成报表

    使用程序运行Reporting Service自动生成文件,可以参数使用ReportExecutionService.Render方法进行处理. 1.     连接至Reporting Service ...

  3. .NET学习笔记(3) — VisualStudio使用总结

    目录 一:VS是什么? 二:VS可以创建什么类型的工程? 三:VS的常用功能? 四:VS都有哪些使用技巧? 五:注意事项 六:资源汇总   一:VS是什么? Microsoft Visual Stud ...

  4. php的传值和传址

    有些情况下,可能希望在函数体内对参数的修改在函数体外也能反映; 使用引用传递参数要在参数前加上&符号; 例子: <?php $a=5; function show(&$a){   ...

  5. ASP读取RSS

    <% @language="VBScript"%> <% Function readrss(xmlseed) dim xmlDoc dim http Set ht ...

  6. Android IntentService使用

    因为多数启动服务不必同时处理多个请求(在多线程情景下会很危险),所以使用IntentService类实现服务是很好的选择.本经验将通过继承IntentService输出当前时间教大家如何使用Inten ...

  7. Opencv——灰度直方图

    灰度直方图是灰度级的函数,它表示图像中具有某种灰度级的像素的个数,反映了图像中某种灰度出现的频率. 如果将图像总像素亮度(灰度级别)看成是一个随机变量,则其分布情况就反映了图像的统计特性,这可用pro ...

  8. Ajax的Get和Post的区别

    Ajax的Get和Post的区别Get方式:用get方式可传送简单数据,但大小一般限制在1KB下,数据追加到url中发送(http的header传送),也就是说,浏览器将各个表单字段元素及其数据按照U ...

  9. 查看Unix系统是32位还是64位

    #getconf查看OS位数 以下经过测试了HP: getconf KERNEL_BITSLinux: getconf LONG_BITAIX: getconf KERNEL_BITMODE #AIX ...

  10. PHP JQuery Json

    PHP: echo Json_encode($result); Jquery: $.get( 'process.php', {'p1':'aa','p2':'dd', 'data_type':'jso ...