1. OutputStreamkelas
Kami baru saja menjelajahi input stream. Saatnya berbicara tentang aliran keluaran.
Kelas OutputStreamadalah 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, FileOutputStreamdan sejenisnya.
Tapi kembali ke OutputStreamkelas. 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 InputStreamdata 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 lengthmerupakan 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-resourcesblok.
Contoh menyalin file
| Kode | Catatan |
|---|---|
|
InputStreamuntuk membaca dari sebuah file OutputStreamuntuk 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. Writerkelas
Kelasnya Writerpersis 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 offsetmenunjukkan indeks elemen pertama dari array, dan lengthmerupakan 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 offsetmenunjukkan indeks elemen pertama dari array, dan lengthmerupakan 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-resourcesblok.
Contoh program yang menyalin file teks:
| Kode | Catatan |
|---|---|
|
Readeruntuk membaca dari sebuah file Writeruntuk 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 |
StringWriterkelas
Ada kelas menarik lainnya yang mewarisi Writerkelas tersebut: disebut StringWriter. Ini berisi string yang bisa berubah - sebuah StringBufferobjek. Dan setiap kali Anda "menulis" sesuatu ke StringWriterobjek, teks ditambahkan ke buffer internalnya.
Contoh:
| Kode | Catatan |
|---|---|
|
Aliran karakter target ( StringWriter) dibuat String ditulis ke buffer di dalam StringWriterString A ditulis ke buffer di dalam StringWriterKonversi isi objek menjadi string |
Dalam hal ini, StringWriterkelas pada dasarnya adalah pembungkus kelas StringBuffer, tetapi StringWriterkelas tersebut adalah turunan dari Writerkelas aliran, dan dapat digunakan dalam rangkaian objek aliran. Ini adalah properti yang cukup berguna dalam praktiknya.
3. PrintStreamkelas
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 PrintStreammewarisi FilterOutputStreamkelas, yang mewarisi OutputStream. Itu berarti bahwa PrintStreamkelas 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()outSystemPrintStream
Di banyak level CodeGym, dan di hampir setiap tugas, Anda telah memanggil metode kelas PrintStreamtanpa menyadarinya!
Penggunaan praktis
Java memiliki kelas menarik yang disebut ByteArrayOutputStream, yang merupakan array byte yang tumbuh secara dinamis yang mewarisi OutputStream.
Objek ByteArrayOutputStreamdan PrintStreamobjek dapat dirantai seperti ini:
| Kode | Keterangan |
|---|---|
|
Buat buffer tulis di memori Bungkus buffer di PrintStreamobjek Tulis data ke konsol Ubah array menjadi string! Keluaran konsol: |
GO TO FULL VERSION