Lompat ke konten Lompat ke sidebar Lompat ke footer

Perbedaan Antara Scanner dan BufferedReader Java

Pada program java, Scanner dan BuffredReader adalah class sumber daya yang menyediakan cara untuk membaca nilai input file. Class Scanner Java merupakan teks pembaca sederhana yang dapat melakukan parsing tipe data primitif dan nilai string. Class ini secara internal menggunakan ekspresi reguler untuk membaca berbagai tipe data berbeda ketika class BufferedReader lainnya sedang membaca teks dari sebuah aliran input karakter tunggal, dimana buffer karakter untuk menyediakan pembacaan urutan karakter yang efisien.

Sebelum lebih lanjut mempelajari materi tentang Perbedaan Antara Scanner dan BufferedReader Java, terlebih dahulu pelajari materi tentang: Mengambil Nilai Input Java Beserta Contohnya, Scanner Class Java Beserta Contohnya, dan Class BufferedReader Java Beserta Contohnya.

Perbedaan eksentriknya terletak pada pembacaan berbagai cara mengambil masukan melalui metode next() yang dibenarkan dalam program di bawah ini melalui kumpulan masukan yang serupa.

Dalam pengembangan perangkat lunak Java, manipulasi input adalah salah satu aspek yang penting. Dua class yang sering digunakan untuk membaca input dari pengguna adalah Scanner dan BufferedReader. Meskipun keduanya memiliki tujuan yang sama, yaitu membaca input, keduanya memiliki perbedaan signifikan dalam penggunaan dan kinerja. Mari jelajahi perbedaan utama antara keduanya.

Penggunaan dan kinerja:
  • Scanner: Class Scanner digunakan untuk memindai tipe data primitif dan string dari aliran input. Ini dapat membaca input dari berbagai sumber, termasuk System.in, file, atau string. Namun, meskipun mudah digunakan, Scanner cenderung memiliki kinerja yang lebih lambat, terutama dalam pembacaan input besar, karena melakukan parsing dan interpretasi data secara langsung.
  • BufferedReader: Sebaliknya, class BufferedReader lebih cocok untuk membaca input teks dari aliran input. Ini membaca data dalam jumlah besar sekaligus dan menyimpannya dalam buffer, yang dapat meningkatkan kinerja secara signifikan, terutama dalam operasi pembacaan yang intensif. Namun, penggunaannya sedikit lebih rumit daripada Scanner.

Penanganan error:
  • Scanner: Penanganan kesalahan dalam Scanner cenderung kurang jelas, karena seringkali eksepsi yang dihasilkan tidak menggambarkan penyebab kesalahan secara spesifik, membuatnya sulit untuk di-debug.
  • BufferedReader: Sebaliknya, BufferedReader menyediakan penanganan kesalahan yang lebih baik melalui pengecualian IOException, yang membantu pengembang dalam menangani situasi yang tidak terduga dengan lebih baik.

Fleksibilitas dan kemudahan penggunaan:
  • Scanner: Scanner lebih fleksibel dalam pembacaan berbagai tipe data dan memungkinkan penggunaan metode khusus seperti nextLine(), nextInt(), dan sebagainya, yang membuatnya lebih mudah digunakan untuk membaca input yang terstruktur.
  • BufferedReader: Di sisi lain, BufferedReader lebih unggul dalam kinerja dan dapat digunakan dengan baik untuk membaca data dalam jumlah besar sekaligus. Namun, untuk membaca tipe data tertentu, perlu dilakukan konversi yang manual.

Kapasitas buffering:
  • Scanner: Tidak menyediakan opsi untuk mengatur ukuran buffer karena parsing dilakukan langsung pada data input.
  • BufferedReader: Memungkinkan penggunaan buffer yang dapat dikonfigurasi, yang memungkinkan pengguna untuk mengontrol ukuran buffer sesuai dengan kebutuhan aplikasi.

Penggunaan dalam lingkungan multithreading:
  • Scanner: Tidak aman untuk digunakan dalam lingkungan berbasis thread karena tidak diberikan mekanisme sinkronisasi.
  • BufferedReader: Lebih aman untuk digunakan dalam lingkungan berbasis thread karena metode read()-nya bersifat sinkronis.

Contoh:

// Program Java untuk

// mengilustrasikan class

// Scanner.


// Mengimpor class Scanner

// dari package java.util.

import java.util.Scanner;


// Main class

class MKN {


// Method driver Main

public static void main(String args[])

{


// Menciptakan object class

// scanner untuk membaca input

// keyboard.

Scanner scn = new Scanner(System.in);

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


// Menggunakan nextInt() untuk

// parsing nilai integer.

int a = scn.nextInt();

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


// Menggunakan nextLine()

// untuk parsing nilai string.

String b = scn.nextLine();


// Menampilkan nama dan usia.

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

+

+ " "

+ "and name as " 

+ b);

}


}


Baca Juga:

Contoh:

// Program Java untuk

// mengilustrasikan class

// BufferedReader.


// Mengimport class yang

// dibutuhkan.

import java.io.*;


// Main class

class MKN {


// Method Driver Main

public static void main(String args[])

throws IOException

{


// Menciptakan object dari

// class didalam method

// main().

BufferedReader br = new BufferedReader(

new InputStreamReader(System.in));

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


// Mengambil input integer.

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

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

String b = br.readLine();


// Mencetak nilai entitas

// input.

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

+ a

+ " and name as " 

+ b);

}


}


Penjelasan: Pada class Scanner, jika dilakukan pemanggilan method nextLine() setelah salah satu dari tujun method nextXXX(), maka nextLine() tidak akan membaca nilai dari konsol dan kursor juga tidak akan menuju ke konsol, atau akan melewatinya ke tahap selanjutnya. Method nextXXX() terdiri dari nextInt(), nextFloat(), nextByte(), nextShort(), nextDouble(), nextLong(), dan next().

Sedangkan pada class BufferReader tidak terdapat tipe data seperti pada permasalah program sebelumnya. Permasalahan tersebut hanya muncul dari class Scanner, karena method nextXXX() mengabaikan karakter baris baru dan hanya membaca sampai karakter baris baru pertama. Jika digunakan satu pemanggilan lagi menggunakan method nextXXX() dan nextLine(), maka permasalahan tersebut tidak akan muncul karena nextLine() akan mengambil karakter baris baru tersebut.

Perbedaan Utama antara Class Scanner dan BufferedReader pada Java:
  • BufferedReader akan sinkron selama Scanner tidak. BufferedReader harus digunakan jika sedang bekerja dengan menggunakan multipe threads.
  • BufferedReader memiliki sebuah memori buffer yang lebih besar dan signifikan lebih dari Scanner.
  • Scanner memiliki sebuah buffer (1KB char buffer) dibandingkan dengan BufferedReader (buffer 8 KB byte), tapi itu lebih dari cukup.
  • BufferedReader sedikit lebih cepat dibandingkan dengan Scanner karena Scanner melakukan penguraian data masukan dan BufferedReader hanya membaca urutan karakter.

Kelebihan dari kelas BufferedReader dibandingkan dengan Scanner dalam konteks pengembangan perangkat lunak Java:
  • Kinerja yang Lebih Tinggi: Salah satu kelebihan utama BufferedReader adalah kinerjanya yang lebih tinggi dalam pembacaan data, terutama dalam situasi dimana data yang besar perlu dibaca. Ini disebabkan oleh penggunaan buffering, dimana BufferedReader membaca dan menyimpan data dalam buffer sebelum mengembalikannya kepada pengguna, yang mengurangi jumlah panggilan ke sumber data.
  • Penggunaan Sumber Daya yang Lebih Efisien: Dengan mengurangi jumlah panggilan ke sumber data, BufferedReader membantu menggunakan sumber daya secara lebih efisien. Ini dapat mengurangi beban pada sumber daya eksternal, seperti file atau jaringan, dan juga meminimalkan penggunaan sumber daya internal, seperti CPU dan memori.
  • Dukungan untuk Membaca Baris Teks dengan Mudah: BufferedReader memiliki metode seperti readLine() yang memungkinkan pembacaan baris teks secara langsung, yang berguna dalam banyak kasus penggunaan, seperti membaca file teks atau input dari pengguna.
  • Fleksibilitas dalam Penanganan Error: Kelas BufferedReader menyediakan penanganan kesalahan yang lebih jelas melalui pengecualian IOException, yang memungkinkan pengembang untuk dengan mudah menangani situasi yang tidak terduga atau kesalahan pembacaan.
  • Penggunaan yang Aman dalam Lingkungan Multithreading: BufferedReader memiliki metode yang bersifat sinkronis, yang berarti lebih aman untuk digunakan dalam lingkungan berbasis thread daripada Scanner. Ini memungkinkan akses bersama dari beberapa thread ke instance BufferedReader yang sama.
  • Kemampuan Mengatur Ukuran Buffer: Pengguna dapat mengatur ukuran buffer saat membuat objek BufferedReader, memungkinkan penyesuaian yang lebih baik sesuai dengan kebutuhan aplikasi. Hal ini memungkinkan optimalisasi kinerja berdasarkan ukuran data yang diharapkan.

Dengan memanfaatkan kelebihan-kelebihan ini, BufferedReader menjadi pilihan yang kuat dalam kasus penggunaan dimana pembacaan data dalam jumlah besar atau performa yang tinggi diperlukan.

Kesimpulan

Kedua class, Scanner dan BufferedReader, memiliki kelebihan dan kekurangan masing-masing. Pemilihan antara keduanya tergantung pada kebutuhan aplikasi dan preferensi pengembang. Untuk aplikasi yang memerlukan kinerja tinggi dan pembacaan data dalam jumlah besar, BufferedReader adalah pilihan yang lebih baik, sementara Scanner cocok untuk aplikasi yang memerlukan kemudahan penggunaan dan fleksibilitas dalam pembacaan data. Dengan memahami perbedaan antara keduanya, pengembang dapat memilih alat yang paling sesuai untuk tugas masing-masing.

Artikel ini didedikasikan kepada: Shintia Apriliana, Siwi Nugrahaning Widhi, Sonyadi Kurniatama, Susanti Septika Avian, dan Syifa Desita Suwandi.

5 komentar untuk "Perbedaan Antara Scanner dan BufferedReader Java"

  1. Apa perbedaan antara class Scanner dan Class bufferedReader Java?

    BalasHapus
    Balasan
    1. bufferedReader merupakan class Java yang lebih cocok untuk membaca file dengan string yang panjang, sedangkan class Scanner lebih cocok untuk membaca nilai input pengguna yang berukuran kecil yang berasal dari command prompt.

      Hapus
    2. bufferedReader Java merupakan class yang dapat disinkronkan, sendangkan class Scanner tidak dapat disinkronkan, yang berarti user tidak dapat membagikan class Scanner ke beberapa thread lainnya pada program Java.

      Hapus
    3. Class Scanner Java merupakan class yang tidak sinkron dan tidak mendukung penggunaan thread Java, sedangkan Class bufferedReader Java merupakan class yang bersifat sinkron dan banyak digunakan dengan banyak thread.

      Hapus
    4. Class Scanner Java memecah nilai input menjadi token menggunakan pola pembatas, sedangkan class bufferedReader Java hanya membaca urutan karakter dalam porsi yang bergantung pada ukuran buffer.

      Hapus

Hubungi admin melalui Wa : +62-896-2414-6106

Respon komentar 7 x 24 jam, mohon bersabar jika komentar tidak langsung dipublikasi atau mendapatkan balasan secara langsung.

Bantu admin meningkatkan kualitas blog dengan melaporkan berbagai permasalahan seperti typo, link bermasalah, dan lain sebagainya melalui kolom komentar.

- Ikatlah Ilmu dengan Memostingkannya -
- Big things start from small things -