Pendahuluan BytearrayInputStream
BytearrayInputStream adalah aliran input array byte. Itu mewarisi dari inputstream.
Ini berisi buffer internal yang berisi byte yang dibaca dari aliran; Dalam istilah Layman, buffer internalnya adalah array byte, dan BytearrayInputStream pada dasarnya diimplementasikan melalui array byte.
Kita semua tahu bahwa InputStream menyediakan antarmuka luar melalui baca () untuk mereka membaca data byte; Sementara ByteArrayInputStream secara internal mendefinisikan penghitung tambahan yang digunakan untuk melacak byte berikutnya yang akan dibaca dengan metode baca ().
Kode Sampel untuk Penggunaan API terperinci di BytearRayInputStream, lihat Kode Sampel (ByTeArrayInputStreamTest.java):
Impor java.io.bytearrayInputStream; import java.io.bytearrayoutputStream;/*** bytearrayInputStream Program*/Kelas Publik BytearRayInputStreamTest {private static final int len = 5; // Sesuai dengan surat bahasa Inggris "ABCDDEFGHIJKLMNOPQRSSTTUVWXYZ" Private Static Final Byte [] Arrayletters = {0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x65, 0x66, 0x67, 0x68, 0x69, 0x65, 0x66, 0x67, 0x68, 0x69, 0x69 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a}; public static void main (string [] args) {string tmp = string baru (arrayletters); System.out.println ("Arrayletters ="+tmp); tesbyTeArrayInputStream (); } / ** * BytearRayInputStream Fungsi uji API * / private static void tesbytearrayInputStream () {// create bytearrayInputStream stream, kontennya adalah arrayleetters arraylearslexters (arrayleTleting (arrayletleTlexTerstream (arrayleTleting); arrayleTletseLetters (arrayletleTlexters (arrayletlePer (arrayleTleting); ArrayLayLleTream (arrayletleDleets); ArrayletleMer (ArrayletleTleMer (ArrayLayLleTream (ArrayleTlets); // Baca 5 byte dari aliran byte untuk (int i = 0; i <len; i ++) {// Jika Anda dapat terus membaca byte berikutnya, baca byte berikutnya if (bais.available ()> = 0) {// baca "byte berikutnya dari aliran byte" int tmp = bais.read (); System.out.printf ("%d: 0x%s/n", i, integer.tohexstring (TMP)); }} // Jika "aliran byte ini" tidak mendukung fungsi penandaan, lalu keluar secara langsung jika (! Bais.marksupported ()) {System.out.println ("Buat tidak didukung!"); kembali ; } // Tandai "posisi baca berikutnya di aliran byte". Yaitu, - tandai "0x66", karena 5 byte telah dibaca sebelumnya, posisi baca berikutnya adalah byte ke -6 "// (01)," parameter 0 "dalam fungsi (0) Fungsi bytearrayinputstream kelas tidak ada di dalamnya. mark()" bais.mark(0); // Skip 5 bytes. After skipping 5 bytes, the next read value in the byte stream should be "0x6B". bais.skip(5); // Read 5 data from the byte stream. That is, read "0x6B, 0x6C, 0x6D, 0x6E, 0x6F" byte[] buf = new byte[LEN]; BAIS.READ (BUF, 0, LEN); Dalam aliran byte "ke" posisi yang ditandai oleh mark () ", yaitu, 0x66. Bais.reset (); // Baca 5 byte dari" reset byte stream "ke dalam buf. Yaitu, baca" 0x66, 0x67, 0x68, 0x69, 0x6a "Bais.read (Bais. // Konversi buf ke string string. Karakter yang sesuai dari "0x66, 0x67, 0x68, 0x69, 0x6a" adalah "fghij" string str2 = string baru (buf); System.out.printf ("str2 =%s/n", str2); }} Hasil Menjalankan:
Arrayletters = ABCDEFGHIJKLMNOPQRSUVWXYZ0: 0x611: 0x622: 0x633: 0x644: 0x65str1 = klmnostr2 = fghij
Deskripsi Hasil:
(01) Arrayletters adalah array byte. Nilai kode ASCII yang sesuai dengan 0x61 adalah A, nilai kode ASCII yang sesuai dengan 0x62 adalah B, dan seterusnya ...
(02) bytearrayInputStream bais = bytearrayInputStream baru (arrayletters); Kalimat ini adalah untuk membuat "Byte Stream Bais", dan isinya adalah arrayletters.
(03) untuk (int i = 0; i <len; i ++); Tujuan dari ini untuk loop adalah untuk membaca 5 byte dari aliran byte. Setiap kali bais.read () dipanggil, satu byte dibaca dari aliran byte.
(04) Bais.mark (0); Kalimat ini adalah "menetapkan tanda aliran byte". Pada saat ini, nilai yang sesuai dari posisi tanda adalah 0x66.
(05) Bais.skip (5); Kalimat ini adalah untuk melewatkan 5 byte. Setelah melewatkan 5 byte, nilai byte baca berikutnya dalam aliran byte yang sesuai adalah 0x6b.
(06) bais.read (buf, 0, len); Kalimat ini adalah "Baca data len dari aliran byte dan tuliskan ke buf, 0 berarti menulis dari posisi ke -0 BUF".
(07) bais.reset (); Kalimat ini mengatur ulang "posisi baca berikutnya dalam aliran byte" ke "posisi yang ditandai oleh mark ()", yaitu, 0x66.
Setelah mempelajari aliran input ByteArrayInputStream. Selanjutnya, kita mempelajari stream output yang sesuai byteArrayOutputStream.
PENDAHULUAN BYTEARRAYOUTPUTSTREAM
BYTEARRAYOUTPUTStream adalah aliran output array byte. Itu mewarisi dari outputstream.
Data dalam ByTeArrayOutputStream ditulis ke array byte. Buffer akan secara otomatis tumbuh karena data terus ditulis. Data dapat diperoleh dengan menggunakan TobyTeArray () dan ToString ().
Kode Sampel untuk Penggunaan API terperinci di ByTeArrayOutputStream, lihat Kode Sampel (ByTeArrayOutputStreamTest.java):
impor java.io.ioException; import java.io.outputStream; impor java.io.bytearrayoutputStream; import java.io.bytearrayInputStream;/** * bytearrayoutsputStream Program * @Author skywang */kelas publik bytearraysputStream * // Sesuai dengan surat bahasa Inggris "ABCDDEFGHIJKLMNOPQRSTTUVWXYZ" Private Static Final Byte [] Arrayletters = {0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x65, 0x66, 0x67, 0x68, 0x69, 0x65, 0x66, 0x67, 0x68, 0x69, 0x65, 0x66, 0x66 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a}; public static void main (string [] args) {// string tmp = string baru (arrayletters); //System.out.println("Arrayletters="+tmp); tesbyTeArrayOutputStream (); } / ** * ByTeArrayOutputStream Fungsi uji API * / private static void tesbyTeArrayOutputStream () {// create bytearrayoutputStream stream bytearrayoutputStream baos = bytearrayoutputStream baru (); // Tulis tiga huruf "A", "B", dan "C" pada gilirannya. 0x41 sesuai dengan A, 0x42 sesuai dengan B, dan 0x43 sesuai dengan C. Baos.write (0x41); Baos.write (0x42); Baos.write (0x43); System.out.printf ("BAOS =%S/N", BAOS); // Tulis 5 byte terakhir dari "3" di array arrayletters ke BAOS. // yaitu, "0x64, 0x65, 0x66, 0x67, 0x68" ditulis secara bersamaan, yaitu, "DEFGH" BAOS.Write (Arrayletters, 3, 5); System.out.printf ("BAOS =%S/N", BAOS); // Hitung ukuran int int = baos.size (); System.out.printf ("size =%s/n", size); // Konversi ke byte [] array byte [] buf = Baos.tobyteArray (); String str = string baru (buf); System.out.printf ("str =%s/n", str); // Konversi ke byte [] array byte [] buf = Baos.tobyteArray (); String str = string baru (buf); System.out.printf ("str =%s/n", str); // tulis BAOS ke aliran output lain coba {bytearrayoutputStream baos2 = new ByTeArrayOutputStream (); Baos.writeto ((OutputStream) Baos2); System.out.printf ("Baos2 =%s/n", Baos2); } catch (ioException e) {e.printstacktrace (); }}} Hasil Menjalankan:
BAOS = ABCBAOS = ABCDEFGHSIZE = 8STR = ABCDEFGHBAOS2 = ABCDEFGH