详细对比BfferedReader和Scanner

相同点

1.都是读入字符

BufferedReader 直接创建字符流,Scanner将字节流转化成字符

二者都可以从键盘接收数据,API文档解释,public BufferedReader(Reader in)方法创建使用默认大小的输入缓冲区的缓冲字符输入流。public Scanner(InputStream source) 构造一个新的扫描器,它产生从指定的输入流扫描的值,从流字节转换为字符使用基础平台的默认字符集。

2.用法相似、

Scanner的用法:

import java.util.Scanner;
 
public class Main {
	
	private static Scanner scan;
	
    public static void main(String[] args) {
    	System.out.println("请输入一行字符串:");
    	scan = new Scanner(System.in);
    	String str = scan.nextLine();
    	System.out.println("用scanner输入的字符串是:");
    	System.out.println(str);
    }
}

输出结果:
在这里插入图片描述
BufferedReader的用法:

import java.io.*;
public class Main {

    public static void main(String[] args) throws IOException{
    	System.out.println("请输入一行字符串:");
    	BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
    	String str = stdin.readLine();
    	System.out.println("用BufferedReader输入的字符串是:");
    	System.out.println(str);
    }

输出结果:
在这里插入图片描述

3.方法相似

BufferedReader.readLine()方法和Scanner.nextLine()方法用法是一样的,都是接收一行内容,以回车换行符结束,但不包括回车换行符。

不同点

1.使用BufferedReader()时要处理IOException异常。
2.BufferedReader.readLine()方法和Scanner.nextLine()方法用法是一样的,都是接收一行内容,以回车换行符结束,但不包括回车换行符。

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

3.另外虽然使用Scanner类的对象读取输入数据比较方便但是运行效率相比BufferedReader低,同时Scanner占用内存空间也大,而且数据量越大,差异越明显;BufferedReader是从字符输入流中读取文本,缓冲各个字符,从而提供字符、数组和行的高效读取!
4.BufferedReader 是缓冲字符输入流。它继承于Reader。在方法上要比Scanner丰富

BufferedReader常用方法

BufferedReader(Reader in)
BufferedReader(Reader in, int size)

void     close()
void     mark(int markLimit)
boolean  markSupported()
int      read()
int      read(char[] buffer, int offset, int length)
String   readLine()
boolean  ready()
void     reset()
long     skip(long charCount)

Scanner常用方法:

 next():取得一个字符串;
 nextInt():将取得的字符串转换成int类型的整数;
 nextFloat():将取得的字符串转换成float型;
 nextBoolean():将取得的字符串转换成boolean型;

具体使用哪个还是要依据实际情况普通的输入的话建议用Scanner, 空格结束当前的输入比较常用,(如果你先学了C语言).

发布了79 篇原创文章 · 获赞 514 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/i6223671/article/details/89041806