Belajar Pemrograman Java Dari Dasar

6 Perbedaan Signifikan Antara BufferedReader dan Scanner Pada Java

Class BufferedReader dan Scanner merupakan dua class yang bisa digunakan untuk membaca file ataupun input dari user melalui command prompt dalam program Java. Namun, diantara keduanya ternyata terdapat perbedaan yang signifikan dan oleh karena itu perlu untuk anda ketahui.

Satu perbedaan utama adalah bahwa BufferedReader hanya dapat membaca String, namun Scanner bisa membaca String dan tipe data yang lainnya seperti long, double, float, short, int. Perbedaan dalam hal fungsional ini memberikan beberapa perbedaan lain dalam penggunaannya.

Pada kesempatan kali ini, tidak hanya akan dibahas mengenai perbedaan antara kedunya saja. Tapi, akan dijelaskan juga mengenai contoh penggunaan keduanya dalam program.

Perbedaan BufferedReader dan Scanner

Berikut ini adalah perbedaab dua class tersebut pada pemrograman Java:
  1. Class BufferedReader hanya bisa membaca String, sedangkan Scanner mampu untuk melakukan parse pada input dari user dan membaca tipe data long, double, float, short, int secara terpisah dari String. Bisa dikatakan bahwa Scanner ini lebih powerfull jika dibandingkan dengan BufferedReader.

  2. Scanner memiliki buffer 1KB, sedangkan BufferedReader memiliki 8KB. Ini berarti jika anda ingin membaca String yang panjang dari suatu file maka anda dapat menggunakan BufferedReader. Namun, jika diperlukan untuk input yang pendek atau selain dari String maka Scanner bisa digunakan.

  3. Scanner adalah class yang lebih baru diperkenalkan, yaitu sejak Java 1.5 sedangkan BufferedReader telah hadir lebih dulu pada Java 1.1

  4. Scanner menggunakan regular expression (regex) untuk membaca dan parse pada input text. Scanner dapat menerima delimiter yang ditentukan oleh programmer sendiri (custom delimiter) dan melakukan parse text pada tipe data primitif dengan method seperti nextLong(), nextDouble(), nextFloat(), nextShort(), nextInt(). BufferedReader hanya dapat membaca dan menyimpan String menggunakan method readLine().

  5. BufferedReader merupakan class yang disinkronisasi (synchronized) sedangkan Scanner tidak demikian. Oleh karena itu, anda bisa menshare objek BufferedReader diantara beberapa thread, tapi anda tidak bisa melakukan ini pada Scanner. 

  6. BufferedReader lebih cepat dari pada Scanner karena tidak memerlukan waktu untuk parse
Contoh:

package com.bahasajava.io;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.InputMismatchException;
import java.util.Scanner;

public class BufferedReaderDanScanner {
 
 public static void main(String[] args) {
  Scanner input = new Scanner(System.in);
  System.out.println("|***************************************************|");
  System.out.println("  Menggunakan Scanner untuk membaca input dari user");
  System.out.println("|***************************************************|");
  boolean inputUser = true;
  
  do{
   try{
    System.out.println("Silakan masukkan nama:");
    String nama = input.nextLine();
    
    System.out.println("Silakan masukkan umur dalam integer: ");
    int umur = input.nextInt();
    
    inputUser = false;
   }
   catch (InputMismatchException e){
    System.out.println("Masukkan input yang sesuai!");
    input.nextLine();
   }
  }while(inputUser);
  
  input.close();
  
  System.out.println("|***********************************************************|");
  System.out.println("  Menggunakan BufferedReader untuk membaca file text");
  System.out.println("|***********************************************************|");
  
  try {
   FileReader fileReader = new FileReader("C:/bahasajavacom/myFile.txt");
   BufferedReader bufferedReader = new BufferedReader(fileReader);
   System.out.println("File anda memiliki baris teks sebagai berikut: ");
   try { 
    String baris = bufferedReader.readLine();
    
    while (baris != null){
     System.out.println(baris);
     baris = bufferedReader.readLine();
    }
    
    bufferedReader.close();
    fileReader.close();
    
   } catch (IOException e){
    e.printStackTrace();
     }
   } catch (FileNotFoundException e) {
    e.printStackTrace();
  }
 }
}

Contoh output:

output bufferedreader scanner java

Dari contoh tersebut, bisa disimpulkan begitu mudahnya Scanner membaca tipe data String dan juga integer dan juga bagaimana class BufferedReader dengan simpel membaca text dari suatu file text dengan simpel.



Class Mana Yang Akan Anda Gunakan?


Itulah perbedaan antara BufferedReader dan Scanner. Jadi gunakan Scanner ketika anda ingin menangani input yang terdiri dari String ataupun tipe data numerik seperti double, float, int dan sebagainya. Sebaliknya, gunakan BufferedReader ketika anda ingin membaca text tanpa parsing, dan karena memiliki buffer yang tinggi, maka BufferedReader dapat juga digunakan untuk membaca String yang panjang pada program Java.

Share on Facebook
Share on Twitter
Share on Google+

Artikel Menarik Lainnya :