Stream adalah konsep abstrak dari urutan byte.
File adalah bentuk data penyimpanan statis, sedangkan stream merujuk ke formulir saat data ditransmisikan.
Kelas aliran dibagi menjadi dua kategori utama: kelas aliran simpul dan kelas aliran yang difilter (juga disebut kelas stream proses).
Kelas yang sesuai dengan perangkat target disebut kelas aliran simpul. Program ini juga dapat memanggil kelas aliran simpul melalui kelas aliran tidak langsung untuk mencapai pembacaan yang lebih fleksibel dan nyaman dari berbagai jenis data. Kelas aliran tidak langsung ini adalah kelas aliran filter (juga disebut kelas aliran pemrosesan), atau kelas pengemasan.
Proses panggilan kelas pembungkus adalah sebagai berikut:
Hubungan antara klasifikasi aliran
Tidak peduli seberapa kaya dan kompleks klasifikasi aliran, akarnya berasal dari empat kelas dasar. Hubungan antara keempat kelas ini adalah sebagai berikut:
| Aliran byte | Aliran Karakter | |
| Aliran input | Inputstream | Pembaca |
| Aliran output | Outputstream | Penulis |
Unicode mengkode karakter yang tersimpan di Java, dan kelas pemrosesan aliran karakter bertanggung jawab untuk mengonversi aliran karakter kode eksternal lainnya dan aliran karakter Unicode di Java. Kelas inputStreamReader dan outputStreamWriter menangani konversi aliran karakter dan aliran byte. Aliran karakter (dapat menangani satu buffer pada satu waktu) lebih efisien pada satu operasi daripada aliran byte (satu byte pada satu waktu).
Inputstream
Karena InputStream dan OutputStream adalah kelas abstak, mereka tidak dapat menunjukkan perangkat IO mana yang sesuai. Ada banyak subclass di bawahnya, termasuk perangkat IO spesifik seperti jaringan, pipa, memori, file, dll., Dan berbagai objek subclass mereka yang digunakan dalam program aktual.
Catatan: Kami memanggil sumber IO dan target yang sesuai dengan kelas aliran node node stream (node).
Catatan: Saat menulis konten file A ke file B, program menggunakan kelas output atau kelas input untuk pengoperasian file A. Kelas input dan output relatif terhadap program, bukan atas nama file, jadi kita harus membuat kelas input untuk menyelesaikan operasi pada file A dan kelas output untuk menyelesaikan operasi pada file B.
Outputstream
Pembaca/penulis aliran yang berorientasi karakter
Aliran yang diarahkan oleh karakter Unicode berarti membaca dari aliran atau menulis informasi ke dalam aliran dalam karakter Unicode. Demikian pula, pembaca/penulis juga kelas abstak.
Pembaca
Penulis
Penggunaan Kembali Kode Program IO:
Biasanya, saat menulis kode, gunakan -1 sebagai akhir input keyboard, dan jangan gunakan System.in secara langsung dalam fungsi tertulis. Hanya saja ketika memanggil fungsi, System.in dilewatkan sebagai parameter. Dengan cara ini, ketika kami ingin membaca data dari file di masa depan untuk menggantikan input keyboard manual, kami dapat menggunakan fungsi ini secara langsung, sehingga program tidak perlu membuat terlalu banyak modifikasi, sehingga dapat mencapai efek dari tidak berubah dan beradaptasi dengan perubahan.
Konversi aliran byte dan aliran karakter
InputStreamReader dan OutputStreamReader: Konversi aliran berorientasi byte menjadi aliran yang berorientasi karakter.
Kelas InputStreamReader adalah jembatan dari aliran byte ke aliran karakter: ia berbunyi di byte dan mengubahnya menjadi aliran karakter sesuai dengan metode pengkodean yang ditentukan.
Metode pengkodean yang digunakan dapat ditentukan oleh nama, atau metode pengkodean default yang dapat diterima oleh platform.
Setiap panggilan ke salah satu metode Read () dari InputStreamReader dapat menyebabkan satu atau lebih byte dibaca dari aliran input byte dasar.
Untuk mencapai efisiensi yang lebih tinggi, pertimbangkan merangkum inputStreamReader dengan bufferedReader.
BufferedReader di = BufferedReader baru (InputStreamReader baru (System.in));
Ringkasan Penggunaan Streaming Java
Saya telah menemukan banyak aliran Java dalam pekerjaan saya yang paling profesional, dan ringkasannya adalah sebagai berikut:
1. Hasilkan format zip. Apa yang Anda temui adalah menghasilkan file zip dalam servlet, mengeluarkannya ke klien web, dan mengunduhnya secara langsung.
response.setContentType ("Aplikasi/Zip"); response.addheader ("disposisi konten", "lampiran; fileName =/" xxx.zip/ ""); ZipoutputStream out = new zipoutputStream (response.getoutputStream ()) untuk () {zipentry entri = new zipentry ("aa" + i ".dat"); out.putNewEntry (entri); bytes [] bt = s.getbytes (); out.writebytes (bt, 0, bt.length ()); out.closeentry (); } out.flush (); out.close (); ZipoutputStream mewarisi dari java.io.filteroutputStream. Oleh karena itu, operasi penulisan nyata ditulis melalui parameter outputstream.
Void write (byte [] b, int off, int len) akhirnya memanggil.write (b, off, len);
Jika Anda ingin menghasilkan file zip, tulis zipoutputStream baru (FileOutputStream baru (path));
2. Tulisan serupa XML.
XMLWRITER Writer = XMLWRITER baru (FileOutputStream baru (PATH), Formatter)
Penulis.write (doc). Prinsipnya mirip dengan yang di atas
3. Tulis file teks dan tambahkan.
PrintStream ps = printStream baru (FileOutputStream baru (path, true), "UTF-8") ps.println (s); // dapat menulis berbagai jenis seperti boolean, int, dll.Printsteam juga mewarisi dari filteroutputstream
DataOutputStream out = DataOutputStream baru (socket.getoutputStream ()); out.writebytes (bt); out.writeboolean (Boolean V);
DataOutputStream juga merupakan filteroutputStream.
5. Baca dari teks
BufferedReader Reader = BufferedReader baru (filereader baru (path)); reader.readline ();
Pola BufferedReader sama dengan pola filter di atas. Ini menyimpan objek yang dilewati objek pembaca sebagai parameter dan digunakan untuk benar -benar membaca.
Kelas yang sesuai dengan Java 1.0 dari BufferedReader adalah bufferedInputStream, yang merupakan filterInputStream.
6. Baca dari soket
BufferedInputStream adalah = BufferedInputStream baru (socket.getInputStream ()); is.read (bt, 0, bt.length ());
Meringkaskan:
Seri aliran kelas dasar adalah InputStream dan OutputStream. Mereka adalah kelas abstrak dan satu -satunya metode yang diperlukan adalah (mengambil output sebagai contoh)
void write (int b) melempar ioException; void write (byte b []) melempar ioExceptionvoid write (byte b [], int off, int len)
Yang paling mendasar adalah operasi byte. Metode pertama tampaknya menulis bilangan bulat, tetapi sebenarnya hanya menulis satu byte (delapan bit terendah). Subkelasnya dibagi menjadi dua seri, satu adalah untuk secara langsung mengoperasikan perangkat output. Apa yang kami temui di atas adalah file (FileOutputStream) dan output servlet (serveTeTutputStream). Yang lain yang umum digunakan juga merupakan bytearrayoutputstream, yang dioperasikan langsung dalam memori.
Berikutnya adalah seri FilterOutputStream, yang menerima parameter kursi objek OutputStream, dan operasi penulisan nyata diselesaikan melalui objek. Misalnya, ZipoutputStream hanya bertanggung jawab untuk menghasilkan data terkompresi. Adapun apakah data ini ditulis untuk mengajukan, memori, atau servletResponse, itu ditentukan oleh parameter input. Ini adalah pola dekorator.
Operasi yang umum digunakan dalam seri filter termasuk printstream (menyediakan print, println, write (boolean [int, char, string]), dan akhirnya menggunakan metode out.write untuk menulisnya dalam byte.
Ada juga DataOutputStream, yang menyediakan WriteByte/WriteBoolean/Writedouble/Writelong/Wiretutf dan metode lainnya.
Ada juga soket/zip dan hal -hal lain yang tidak biasa digunakan.
Streaming Java sangat nyaman dan rumit. Kompleksitas berarti bahwa menerapkan fungsi seringkali membutuhkan beberapa kelas, dan ada banyak kombinasi. Masih perlu dirangkum dalam praktik.