Рубрики

Разница между сканером и классом BufferReader в Java

java.util.Scanner class — это простой текстовый сканер, который может анализировать примитивные типы и строки. Он внутренне использует регулярные выражения для чтения различных типов.

Класс Java.io.BufferedReader читает текст из потока ввода символов, буферизуя символы, чтобы обеспечить эффективное чтение последовательности символов

Ниже приведены различия между двумя.

Проблема со сканером, когда nextLine () используется после nextXXX ()
Попробуйте угадать вывод следующего кода:

// Код с использованием класса сканера

import java.util.Scanner;

class Differ

{

     public static void main(String args[])

     {

         Scanner scn = new Scanner(System.in);

         System.out.println("Enter an integer");

         int a = scn.nextInt();

         System.out.println("Enter a String");

         String b = scn.nextLine();

         System.out.printf("You have entered:- "

                 + a + " " + "and name as " + b);

     }

}

Входные данные:

50
Geek

Выход:

Enter an integer
Enter a String
You have entered:- 50 and name as

Давайте попробуем то же самое, используя класс Buffer и тот же Input

// Код с использованием класса буфера

import java.io.*;

class Differ

{

    public static void main(String args[])

                  throws IOException

    {

        BufferedReader br = new BufferedReader(new

        InputStreamReader(System.in));

        System.out.println("Enter an integer");

        int a = Integer.parseInt(br.readLine());

        System.out.println("Enter a String");

        String b = br.readLine();

        System.out.printf("You have entered:- " + a +

                          " and name as " + b);

    }

}

Входные данные:

50
Geek

Выход:

Enter an integer
Enter a String
you have entered:- 50 and name as Geek

В классе Scanner, если мы вызываем метод nextLine () после любого из семи методов nextXXX (), тогда nextLine () не считывает значения из консоли, и курсор не входит в консоль, он пропускает этот шаг. Методы nextXXX (): nextInt (), nextFloat (), nextByte (), nextShort (), nextDouble (), nextLong (), next ().

В классе BufferReader такой проблемы нет. Эта проблема возникает только для класса Scanner, поскольку методы nextXXX () игнорируют символ новой строки, а nextLine () читает только до первого символа новой строки. Если мы используем еще один вызов метода nextLine () между nextXXX () и nextLine (), то эта проблема не возникнет, потому что nextLine () будет использовать символ новой строки. Смотрите это для исправленной программы. Эта проблема такая же, как и scanf (), за которой следует get () в C / C ++ .
Эту проблему также можно решить, используя next () вместо nextLine () для получения ввода строк, как показано здесь .

Другие отличия:

  • BufferedReader работает синхронно, а Scanner — нет. BufferedReader следует использовать, если мы работаем с несколькими потоками.
  • BufferedReader имеет значительно большую буферную память, чем Scanner.
  • Сканер имеет небольшой буфер (1KB буфер символов) в отличие от BufferedReader (8KB байтовый буфер), но этого более чем достаточно.
  • BufferedReader немного быстрее по сравнению со сканером, потому что сканер выполняет синтаксический анализ входных данных, а BufferedReader просто читает последовательность символов.

Эта статья предоставлена Пранавом Адаршем . Если вам нравится GeeksforGeeks и вы хотите внести свой вклад, вы также можете написать статью и отправить ее по почте на contrib@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой теме

Рекомендуемые посты:

Разница между сканером и классом BufferReader в Java

0.00 (0%) 0 votes