Apa perbedaan antara Reader dan InputStream? Dan kapan harus menggunakan apa? Jika saya dapat menggunakan Pembaca untuk membaca karakter mengapa saya akan menggunakan inputstream, saya kira untuk membaca objek?
87
Apa perbedaan antara Reader dan InputStream? Dan kapan harus menggunakan apa? Jika saya dapat menggunakan Pembaca untuk membaca karakter mengapa saya akan menggunakan inputstream, saya kira untuk membaca objek?
Jawaban:
InputStream adalah metode mentah untuk mendapatkan informasi dari sumber daya. Ini mengambil data byte demi byte tanpa melakukan terjemahan apa pun. Jika Anda membaca data gambar, atau file biner apa pun, inilah aliran yang akan digunakan.
Pembaca dirancang untuk aliran karakter. Jika informasi yang Anda baca semuanya teks, maka Pembaca akan menangani pengodean karakter untuk Anda dan memberi Anda karakter unicode dari aliran input mentah. Jika Anda membaca jenis teks apa pun, inilah aliran yang akan digunakan.
Anda dapat menggabungkan InputStream dan mengubahnya menjadi Reader dengan menggunakan kelas InputStreamReader.
Reader reader = new InputStreamReader(inputStream, StandardCharsets.UTF_8);
sumber
InputStreams digunakan untuk membaca byte dari aliran. Jadi mereka berguna untuk data biner seperti gambar, video dan objek berseri.
Pembaca di sisi lain adalah aliran karakter sehingga paling baik digunakan untuk membaca data karakter.
sumber
read()
byte demi byte dan kapan menggunakanread(byte[])
array byte. Karena saya pikir membaca array selalu lebih baik. maka dapatkah Anda memberi saya contoh di mana menggunakanread()
byte demi byte ATAUread(byte[])
array byte. ATAUBufferedInputStream
.?Saya kira sumber kebingungannya adalah yang
InputStream.read()
mengembalikanint
danReader.read()
juga mengembalikanint
.Perbedaannya adalah bahwa
InputStream.read()
mengembalikan nilai byte antara 0 dan 255 sesuai dengan konten mentah aliran byte danReader.read()
mengembalikan nilai karakter antara 0 dan 65357 (karena ada 65358 titik kode unicode yang berbeda)Sebuah
InputStream
memungkinkan Anda membaca isi byte dengan byte, misalnya isi "sebuah ‡ a" dibaca sebagai aliran 5 byte (masing-masing diwakili sebagaiint
antara 0 dan 255) yang mengakibatkan97
,226
,128
,161
dan97
di manaa -> U+0061 -> 0x61 (hex) -> 97 (dec) ‡ -> U+2021 -> 0xE280A1 (utf-8 encoding of 0x2021) -> 226 128 161 (1 int per byte) a -> U+0061 -> 0x61 (hex) -> 97 (dec)
A
Reader
memungkinkan Anda membaca konten karakter demi karakter sehingga konten "a ‡ a" dibaca sebagai 3 karakter97
,8225
dan di97
manaa -> U+0061 -> 0x61 -> 97 ‡ -> U+2021 -> 0x2021 -> 8225 (single int, not 3) a -> U+0061 -> 0x61 -> 97
Karakter ‡ disebut sebagai U + 2021 di Unicode
sumber
Latar Belakang InputStream & Pembaca:
Pada masa-masa awal java, satu-satunya cara untuk melakukan input konsol adalah dengan menggunakan aliran byte (InputStream dan OutputStream).
Kasus penggunaan:
Saat ini, menggunakan aliran byte untuk membaca aliran konsol juga dapat diterima. Namun, untuk aplikasi komersial, metode yang disukai untuk membaca input konsol adalah dengan menggunakan aliran berorientasi karakter (Pembaca). Pembaca membuat Anda lebih mudah untuk menginternasionalkan dan memelihara.
Catatan: Ini hanyalah informasi tambahan untuk menjelajahi kode-kode Java I / O yaitu, pola desain implementasi Java I / O mengikuti pola desain dekorator. Jika Anda terbiasa dengan pola desain dekorator maka Anda dapat dengan mudah mengejar ketinggalan penerapannya.
sumber
Satu menerima byte dan yang lain menerima karakter.
sumber
InputStream menerima byte , Pembaca menerima karakter, Dalam Java, satu karakter = dua byte, dan Pembaca menggunakan buffer, InputStream tidak digunakan. Semua file disimpan dalam disk atau transfer berdasarkan byte, termasuk gambar dan video, tetapi karakter ada di memori, sehingga InputStream sering digunakan.
sumber