Perbedaan Antara Scanner dan BufferedReader Java
- 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.
- 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.
- 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.
- 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.
- 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.
// 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:- "
+ a
+ " "
+ "and name as "
+ b);
}
}
// 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);
}
}
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.
- 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.
Kesimpulan
5 komentar untuk "Perbedaan Antara Scanner dan BufferedReader Java"
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 -
Apa perbedaan antara class Scanner dan Class bufferedReader Java?
BalasHapusbufferedReader 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.
HapusbufferedReader 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.
HapusClass 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.
HapusClass 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