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?
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);
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.
read()
byte demi byte dan kapan menggunakan read(byte[])
array byte. Karena saya pikir membaca array selalu lebih baik. maka dapatkah Anda memberi saya contoh di mana menggunakan read()
byte demi byte ATAU read(byte[])
array byte. ATAU BufferedInputStream
.?
Saya kira sumber kebingungannya adalah yang InputStream.read()
mengembalikan int
dan Reader.read()
juga mengembalikan int
.
Perbedaannya adalah bahwa InputStream.read()
mengembalikan nilai byte antara 0 dan 255 sesuai dengan konten mentah aliran byte dan Reader.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 sebagai int
antara 0 dan 255) yang mengakibatkan 97
, 226
, 128
, 161
dan 97
di mana
a -> 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 karakter 97
, 8225
dan di 97
mana
a -> U+0061 -> 0x61 -> 97
‡ -> U+2021 -> 0x2021 -> 8225 (single int, not 3)
a -> U+0061 -> 0x61 -> 97
Karakter ‡ disebut sebagai U + 2021 di Unicode
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.
Satu menerima byte dan yang lain menerima karakter.
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.