Sejauh yang saya tahu, dua metode paling umum membaca data berbasis karakter dari file di Java menggunakan Scanner
atau BufferedReader
. Saya juga tahu bahwa BufferedReader
membaca file secara efisien dengan menggunakan buffer untuk menghindari operasi disk fisik.
Pertanyaan saya adalah:
- Apakah
Scanner
berkinerja sebaikBufferedReader
? - Mengapa Anda memilih
Scanner
lebihBufferedReader
atau sebaliknya?
java
file-io
java.util.scanner
bufferedreader
Mads Mobæk
sumber
sumber
Jawaban:
Scanner
digunakan untuk parsing token dari isi stream sambilBufferedReader
hanya membaca stream dan tidak melakukan parsing khusus.Bahkan Anda bisa meneruskan
BufferedReader
kescanner
sebagai sumber karakter untuk diuraikan.sumber
Scanner
pada akhirnya tergantung pada sesuatu yang lain untuk inputnya, yang mungkin disinkronkan.Dalam rilis / build (b27) JDK6 terbaru saat ini,
Scanner
buffer memiliki yang lebih kecil ( 1024 karakter ) dibandingkan denganBufferedReader
( 8192 karakter ), tetapi lebih dari cukup.Untuk pilihan, gunakan
Scanner
jika Anda ingin mengurai file, gunakanBufferedReader
jika Anda ingin membaca file baris demi baris. Juga lihat teks pengantar dari dokumentasi API yang disebutkan sebelumnya.nextXxx()
metode diScanner
kelas.sumber
readInt();
readFloat (); dll. Sekarang dapatkan apa artinya parsing. dan BalusC dapat Anda berikan sedikit waktu untuk saya hanya 10 menit di ruang obrolan, saya ingin bertanya sedikit tentang buffered, bagaimana cara kerjanya.BufferedReader
dengan konstruktor Scanner? apakah ini ide yang bagus?Scanner
Buffer akan diperluas sesuai kebutuhan untuk pencocokan pola. Jadi jika Anda menginginkan buffer yang lebih besar, Anda hanya perlu memohon, misalnyafindWithinHorizon("\\z", 8192)
, di atasnya dan sesudahnya, ia akan menggunakan buffer dengan kapasitas8192
karakter (atau seluruh file jika lebih kecil dari itu).Lihat tautan ini , berikut dikutip dari sana:
sumber
BufferedReader
memiliki memori penyangga yang jauh lebih besar daripada Pemindai. GunakanBufferedReader
jika Anda ingin mendapatkan string panjang dari aliran, dan gunakanScanner
jika Anda ingin menguraikan jenis token tertentu dari aliran.Scanner
dapat menggunakan tokenize menggunakan pembatas khusus dan mengurai aliran ke tipe data primitif, sementaraBufferedReader
hanya dapat membaca dan menyimpan String.BufferedReader
sinkron sementaraScanner
tidak. GunakanBufferedReader
jika Anda bekerja dengan banyak utas.Scanner
menyembunyikan IOException sambilBufferedReader
melemparnya dengan segera.sumber
Saya sarankan untuk digunakan
BufferedReader
untuk membaca teks.Scanner
bersembunyiIOException
saatBufferedReader
melemparnya dengan segera.sumber
Perbedaan antara BufferedReader dan Pemindai adalah sebagai berikut:
Kode untuk membaca baris dari konsol:
Pemimpin Buffered :
Pemindai :
sumber
Berikut ini adalah perbedaan antara BufferedReader dan Scanner
Terima kasih
sumber
Perbedaan Utama:
Contoh
mencetak output berikut:
Output yang sama dapat dihasilkan dengan kode ini, yang menggunakan ekspresi reguler untuk mem-parsing keempat token sekaligus:
Pemimpin Buffered:
Membaca teks dari aliran input karakter, buffering karakter untuk menyediakan pembacaan karakter, array, dan garis yang efisien.
Ukuran buffer dapat ditentukan, atau ukuran default dapat digunakan. Standarnya cukup besar untuk sebagian besar keperluan.
Secara umum, setiap permintaan baca yang dibuat oleh Pembaca menyebabkan permintaan baca yang sesuai dibuat dari karakter atau aliran byte yang mendasarinya. Oleh karena itu disarankan untuk membungkus BufferedReader di sekitar Pembaca mana pun yang membaca () operasinya mungkin mahal, seperti FileReaders dan InputStreamReaders. Sebagai contoh,
akan buffer input dari file yang ditentukan. Tanpa buffering, setiap permintaan read () atau readLine () dapat menyebabkan byte dibaca dari file, dikonversi menjadi karakter, dan kemudian dikembalikan, yang bisa sangat tidak efisien. Program yang menggunakan DataInputStreams untuk input tekstual dapat dilokalkan dengan mengganti setiap DataInputStream dengan BufferedReader yang sesuai.
Sumber: Tautan
sumber
Ada berbagai cara mengambil input di java seperti:
1) BufferedReader 2) Scanner 3) Argumen Baris Perintah
BufferedReader Baca teks dari aliran input karakter, buffering karakter untuk menyediakan pembacaan karakter, array, dan garis yang efisien.
Di mana Pemindai adalah pemindai teks sederhana yang dapat mem-parsing tipe dan string primitif menggunakan ekspresi reguler.
jika Anda menulis pembaca log sederhana, Buffered reader sudah memadai. jika Anda menulis Pemindai parser XML adalah pilihan yang lebih alami.
Untuk informasi lebih lanjut silakan merujuk:
http://java.meritcampus.com/t/240/Bufferedreader?tc=mm69
sumber
Jawaban di bawah ini diambil dari Membaca dari Konsol: JAVA Scanner vs BufferedReader
Saat membaca input dari konsol, ada dua opsi yang ada untuk mencapai itu. Pertama menggunakan
Scanner
, menggunakan yang lainBufferedReader
. Keduanya memiliki karakteristik berbeda. Itu artinya perbedaan cara menggunakannya.Scanner memperlakukan input yang diberikan sebagai token. BufferedReader baru saja membaca baris demi baris yang diberikan input sebagai string. Pemindai itu sendiri menyediakan kemampuan penguraian seperti nextInt (), nextFloat ().
Tapi, apa perbedaan orang lain?
Pemindai hadir sejak JDK versi 1.5 lebih tinggi.
Kapan sebaiknya menggunakan Scanner, atau Buffered Reader?
Lihatlah perbedaan utama di antara keduanya, satu menggunakan tokenized, yang lain menggunakan garis aliran. Saat Anda membutuhkan kemampuan parsing, gunakan Pemindai sebagai gantinya. Tapi, saya lebih nyaman dengan BufferedReader. Ketika Anda perlu membaca dari File, gunakan BufferedReader, karena itu menggunakan buffer ketika membaca file. Atau Anda dapat menggunakan BufferedReader sebagai input ke Pemindai.
sumber
BufferedReader mungkin akan memberikan Anda kinerja yang lebih baik (karena Scanner didasarkan pada InputStreamReader, lihat sumber).up, untuk membaca dari file menggunakan nio. Ketika saya menguji kinerja nio terhadap kinerja BufferedReader untuk file besar, nio menunjukkan kinerja yang sedikit lebih baik.sumber
Saya lebih suka
Scanner
karena itu tidak membuang pengecualian diperiksa dan karena itu penggunaannya menghasilkan kode yang lebih ramping.sumber