java中Scanner和BufferReader之间的区别

时间:2020-02-23 14:34:07  来源:igfitidea点击:

在本教程中,我们将在Java中看到Scanner和BufferReader之间的区别。

Java有两个类已用于读取文件很长一段时间。

这两个程序是 ScannerBufferedReader
在本教程中,我们将在两个程序之间找到主要的差异和相似之处。

介绍

让我们先通过快速介绍 ScannerBufferReader程序。

Scanner

扫描仪类可用于通过从java.util包导入来用于用户输入。
用户可以使用Scanner类从System.in(来自命令行)的数字。

Scanner sc  = new Scanner(System.in);
int i = sc.nextInt();

让我们尝试一个简单的例子来了解Scanner类的工作。

package com.mycompany.hellonetbeans;
 
import java.util.Scanner;
 
/**
 *
 * @author arti
 */
public class UseOfScanner {
 
    public static void main(String[] args) {
       
        Scanner scan = new Scanner(System.in);
        String name = scan.next();
        int num = scan.nextInt();
        scan.close();
 
        System.out.println("my name is: " + name);
        System.out.println("my lucky number is: " + num);
        
    }
}

上述计划的输出将是:

FooBar 9
my name is: FooBar
my lucky number is: 9

如果我们不想在该案例中读取终端并希望从给定文件读取,则可以使用Scanner类。

Scanner sc = new Scanner(new File("fileName"));
while (sc.hasNextLine()){
     System.out.println(sc.nextLine());
}

BufferedReader.

可以通过从java.io包来使用bufferedReader类。
它从任何输入流线读取字符。
如果要使用BufferedReader从文件读取,则需要使用适当的文件阅读器。
它可以使用ReadLine()逐行读取数据行。

BufferedReader Br =新BuffereReader(新Finereader("filename"));

BufferedReader缓冲区字符,并在有效的字符,数组,行等中读取它。

让我们通过一个例子来了解BufferedReader的运作

package com.mycompany.hellonetbeans;
 
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;
 
/**
 *
 * @author arti
 */
public class BufferedReaderExample {
 
    public static void main(String[] args) throws IOException {
 
        String line;
        try {
            BufferedReader br = new BufferedReader(new FileReader("foo.txt"));
            while ((line = br.readLine()) != null) {
                System.out.println(line);
            }
 
        } catch (FileNotFoundException ex) {
            Logger.getLogger(UseOfScanner.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

上述代码的输出将是

Hi, this is an example.
line 1
line 2
line 3

扫描仪和BufferedReader之间的区别

  • 如果我们有一个我们不在乎的小应用程序 synchronizationconcurrency,我们可以使用扫描仪类,而在线程安全的环境中 BufferedReader将是一个不错的选择。
  • Scanner类具有较小的缓冲存储器,为1024个字符,而 BufferedReader具有8192个字符的默认缓冲存储器,也可以扩展。
  • Scanner类来自 JDK 1.5,所以支持JDK 1.5的旧应用程序无法使用扫描仪类。 BufferedReader类来自Java JDK 1.1,因此它支持使用旧版本的Java的应用程序。
  • 扫描仪类使用正则表达式在解析字符串中,默认情况下,空白空间可设置为分隔符,但我们可以设置任何其他分隔符。
  • BufferedReader仅用于读取数据,而扫描仪类用于读取和解析数据。