1. OutputStream
kelas
Kami baru saja menjelajahi input stream. Saatnya berbicara tentang aliran keluaran.
Kelas OutputStream
adalah kelas induk untuk semua kelas yang mendukung output byte. Ini adalah class abstrak yang tidak melakukan apa-apa sendiri, tetapi memiliki class turunan untuk setiap kesempatan.
Kedengarannya sangat rumit. Sederhananya, kelas ini beroperasi pada byte, dan bukan, misalnya, karakter atau tipe data lainnya. Dan fakta bahwa itu abstrak berarti kita biasanya tidak menggunakannya, melainkan salah satu kelas turunannya. Misalnya, FileOutputStream
dan sejenisnya.
Tapi kembali ke OutputStream
kelas. Kelas ini memiliki metode yang harus diterapkan oleh semua kelas turunannya. Inilah yang utama:
Metode | Keterangan |
---|---|
|
Menulis satu byte (bukan int ) ke aliran. |
|
Menulis array byte ke aliran |
|
Menulis bagian dari array byte ke aliran |
|
Menulis semua data yang disimpan dalam buffer ke aliran |
|
Menutup aliran |
Saat Anda membuat objek dari kelas yang mewarisi InputStream
, Anda biasanya menentukan objek sumber tempat InputStream
data dibaca. Saat Anda membuat objek dari kelas yang mewarisi OutputStream
, Anda juga biasanya menentukan objek target atau aliran data yang akan ditulis.
Mari kita bahas secara singkat semua metode kelas OutputStream
:
write(int b)
metode
Metode ini menulis satu byte (bukan int
) ke aliran keluaran. Nilai yang diteruskan dilemparkan ke satu byte, dan tiga byte pertama dari int dibuang.
write(byte[] buffer)
metode
Menulis array byte yang diberikan ke aliran keluaran. Itu dia.
write(byte[] buffer, int offset, int length)
metode
Menulis sebagian dari array byte yang diteruskan ke aliran keluaran. Variabel offset menunjukkan indeks elemen pertama dari array, dan length
merupakan panjang subset yang akan ditulis.
flush()
metode
Metode ini flush()
digunakan untuk memaksa data apa pun yang berpotensi disangga dalam aliran saat ini untuk ditulis ke aliran target. Ini relevan saat menggunakan buffering dan/atau beberapa objek aliran yang diatur dalam sebuah rantai.
close()
metode
Menulis data tidak tertulis apa pun ke objek target. Metode close()
tidak perlu dipanggil jika Anda menggunakan try-with-resources
blok.
Contoh menyalin file
Kode | Catatan |
---|---|
|
InputStream untuk membaca dari sebuah file OutputStream untuk menulis ke sebuah file Buffer dimana kita akan membaca data Selama ada data di dalam stream Membaca data ke dalam buffer Menulis data dari buffer ke stream kedua |
2. Writer
kelas
Kelasnya Writer
persis sama dengan kelasnya OutputStream
, tetapi sekali lagi hanya ada satu perbedaan: ia bekerja dengan karakter ( char
) bukan byte.
Ini adalah kelas abstrak: Anda tidak dapat membuat objek kelas Writer
. Tujuan utamanya adalah menjadi kelas induk umum untuk ratusan kelas keturunan dan memberi mereka metode umum untuk bekerja dengan aliran karakter.
Metode kelas Writer
(dan semua kelas turunannya):
Metode | Keterangan |
---|---|
|
Menulis satu karakter (bukan int ) ke aliran. |
|
Menulis array karakter ke aliran |
|
Menulis bagian dari array karakter ke aliran |
|
Menulis string ke aliran |
|
Menulis bagian dari string ke aliran |
|
Menulis semua data yang disimpan dalam buffer ke aliran |
|
Menutup aliran |
Metodenya sangat mirip dengan metode kelas OutputStream
, tetapi mereka bekerja dengan karakter, bukan byte.
Deskripsi metode:
write(int b)
metode
Metode ini menulis satu karakter ( char
— bukan int
) ke aliran keluaran. Nilai yang diteruskan dilemparkan ke a char
, dan dua byte pertama dibuang.
write(char[] buffer)
metode
Menulis larik karakter yang diberikan ke aliran keluaran.
write(char[] buffer, int offset, int length)
metode
Menulis sebagian dari array karakter yang diteruskan ke aliran keluaran. Variabel offset
menunjukkan indeks elemen pertama dari array, dan length
merupakan panjang subset yang akan ditulis.
write(String str)
metode
Menulis string yang diberikan ke aliran keluaran.
write(String str, int offset, int length)
metode
Menulis sebagian dari string yang diberikan ke aliran output: string diubah menjadi array karakter. Variabel offset
menunjukkan indeks elemen pertama dari array, dan length
merupakan panjang subset yang akan ditulis.
flush()
metode
Metode ini flush()
digunakan untuk memaksa data apa pun yang berpotensi disangga dalam aliran saat ini untuk ditulis ke aliran target. Ini relevan saat menggunakan buffering dan/atau beberapa objek aliran yang diatur dalam sebuah rantai.
close()
metode
Menulis data tidak tertulis apa pun ke objek target. Metode close()
tidak perlu dipanggil jika Anda menggunakan try-with-resources
blok.
Contoh program yang menyalin file teks:
Kode | Catatan |
---|---|
|
Reader untuk membaca dari sebuah file Writer untuk menulis ke sebuah file Buffer dimana kita akan membaca data Selama ada data di dalam stream Membaca data ke dalam buffer Menulis data dari buffer ke stream kedua |
StringWriter
kelas
Ada kelas menarik lainnya yang mewarisi Writer
kelas tersebut: disebut StringWriter
. Ini berisi string yang bisa berubah - sebuah StringBuffer
objek. Dan setiap kali Anda "menulis" sesuatu ke StringWriter
objek, teks ditambahkan ke buffer internalnya.
Contoh:
Kode | Catatan |
---|---|
|
Aliran karakter target ( StringWriter ) dibuat String ditulis ke buffer di dalam StringWriter String A ditulis ke buffer di dalam StringWriter Konversi isi objek menjadi string |
Dalam hal ini, StringWriter
kelas pada dasarnya adalah pembungkus kelas StringBuffer
, tetapi StringWriter
kelas tersebut adalah turunan dari Writer
kelas aliran, dan dapat digunakan dalam rangkaian objek aliran. Ini adalah properti yang cukup berguna dalam praktiknya.
3. PrintStream
kelas
Kelas aliran keluaran juga dapat dimasukkan ke dalam rantai dengan aliran perantara yang menulis data ke aliran target yang diteruskan ke mereka. Tampilan umum dari interaksi aliran ini terlihat seperti ini:
Yang paling menarik dan serbaguna dari semua aliran keluaran perantara adalah PrintStream
. Ini memiliki puluhan metode dan sebanyak 12 konstruktor.
Kelas PrintStream
mewarisi FilterOutputStream
kelas, yang mewarisi OutputStream
. Itu berarti bahwa PrintStream
kelas tersebut memiliki semua metode dari kelas induk selain metodenya sendiri . Inilah yang paling menarik:
Metode | Keterangan |
---|---|
|
Mengonversi objek yang diteruskan menjadi string dan menampilkannya ke aliran target. |
|
Mengonversi objek yang diteruskan menjadi string dan menampilkannya ke aliran target. Menambahkan jeda baris di akhir |
|
Mengeluarkan karakter jeda baris ke aliran target |
|
Membuat dan menampilkan string berdasarkan format string dan argumen yang diteruskan; mirip dengan String.format() metode |
Dan di mana puluhan metode ini, Anda bertanya?
Yah, itu memiliki banyak varian print()
dan println()
metode dengan parameter yang berbeda. Mereka dapat diringkas dalam tabel ini.
Kami tidak akan mendalami metode ini, karena Anda sudah mengetahuinya dengan baik. Bisakah Anda menebak apa yang saya maksud?
Ingat System.out.println()
? Tapi itu bisa ditulis dalam dua baris:
Kode | Keluaran konsol |
---|---|
|
|
Perintah favorit kami adalah panggilan ke metode pada variabel statis kelas . Dan tipe variabel ini adalah .System.out.println()
println()
out
System
PrintStream
Di banyak level CodeGym, dan di hampir setiap tugas, Anda telah memanggil metode kelas PrintStream
tanpa menyadarinya!
Penggunaan praktis
Java memiliki kelas menarik yang disebut ByteArrayOutputStream
, yang merupakan array byte yang tumbuh secara dinamis yang mewarisi OutputStream
.
Objek ByteArrayOutputStream
dan PrintStream
objek dapat dirantai seperti ini:
Kode | Keterangan |
---|---|
|
Buat buffer tulis di memori Bungkus buffer di PrintStream objek Tulis data ke konsol Ubah array menjadi string! Keluaran konsol:
|