BytearrayInputStream -Einführung
BytearrayInputStream ist ein Byte -Array -Eingangsstrom. Es erbt von InputStream.
Es enthält einen internen Puffer, der Bytes enthält, die aus dem Stream gelesen wurden. In Laiens Begriffen ist sein interner Puffer eine Reihe von Bytes, und BytearrayInputStream wird im Wesentlichen durch eine Reihe von Bytes implementiert.
Wir alle wissen, dass InputStream Schnittstellen über Read () nach außen liefert, damit sie Byte -Daten lesen können. Während BytearrayInputStream intern einen zusätzlichen Zähler definiert, der verwendet wird, um das nächste Byte zu verfolgen, das von der Read () -Methode gelesen wird.
Beispielcode zur detaillierten Verwendung der API in BytearrayInputStream finden Sie im Beispielcode (BytearrayInputStreamtest.java):
Importieren Sie Java.io.BytearrayInputStream; Import Java.io.BytearrayoutputStream;/*** BytearrayInputStream -Testprogramm*/öffentliche Klasse BytearrayInputStreamTest {private statische endgültige int len = 5; // entspricht dem englischen Buchstaben "ABCDDEFGHIJKLMNOPQRSSTTTUVWXYZ" Private statische endgültige Byte [] Arrayletters = {0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6a, 0x6a, 0x6a, 0x6a, 0x6a, 0x6a, 0x6a, 0x6a, 0x6a, 0x6a, 0x6. 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a}; public static void main (String [] args) {String tmp = new String (Arrayletters); System.out.println ("arrayletter ="+tmp); tesbytearrayInputStream (); } / ** * bytearrayInputStream -API -Testfunktion * / private statische void tesBytearrayInputStream () {// BytearrayInputStream -Byte -Stream erstellen, ist Arrayletter -Array -BytearrayinputStream bais = neu bytearraputstream (Arrayletter); // 5 Bytes aus dem Byte -Stream für (int i = 0; i <len; i ++) {// Wenn Sie weiterhin das nächste Byte lesen können, lesen Sie das nächste Byte, wenn (bais.available ()> = 0) {// Lesen Sie "Nächstes Byte des Byte -Streams" int tmp = bais.Read (); System.out.printf ("%d: 0x%S/N", I, Integer.tohexString (TMP)); }} // Wenn "dieses Byte -Stream" die Markierungsfunktion nicht unterstützt, beenden Sie direkt, wenn (! Bais.marksSupported ()) {System.out.println ("Nicht unterstützt!"); zurückkehren ; } // markieren "die nächste gelesene Position im Byte -Stream". Das heißt, - markieren "0x66", da bereits 5 Bytes gelesen wurden, ist die nächste Leseposition das 6. Byte "// (01)," Parameter 0 "in der Mark (0) -Funktion der Bytearrayinputstream -Klasse" Parameter 0 ". BAIS (0); 0, Len); markiert von mark () ", dh 0x66. bais.reset (); // 5 Bytes aus dem" Byte -Stream zurücksetzen "in die buf. // BUF in eine Zeichenfolge konvertieren. Das entsprechende Zeichen von "0x66, 0x67, 0x68, 0x69, 0x6a" ist "fghij" String str2 = neuer String (BUF); System.out.printf ("Str2 =%s/n", str2); }} Auslaufergebnisse:
Arrayletter = abcdefghijklmnopqrstuvwxyz0: 0x611: 0x622: 0x633: 0x644: 0x65str1 = klmnoStr2 = fghij
Ergebnisse Beschreibung:
(01) Arrayletters ist ein Byte -Array. Der ASCII -Codewert, der 0x61 entspricht, ist a, der ASCII -Codewert, der 0x62 entspricht, ist b und so weiter ...
(02) BytearrayInputStream Bais = New BytearrayInputStream (Arrayletter); Dieser Satz soll "Byte Stream Bais" erstellen, und sein Inhalt ist Arrayletter.
(03) für (int i = 0; i <len; i ++); Der Zweck dieser Schleife besteht darin, 5 Bytes aus dem Byte -Stream zu lesen. Jedes Mal, wenn Bais.read () aufgerufen wird, wird ein Byte aus dem Byte -Stream gelesen.
(04) Bais.mark (0); Dieser Satz lautet "Setzen Sie die Marke des Byte -Streams". Zu diesem Zeitpunkt beträgt der entsprechende Wert der Markierungsposition 0x66.
(05) Bais.skip (5); Dieser Satz soll 5 Bytes überspringen. Nach dem Überspringen von 5 Bytes beträgt der Wert des nächsten gelesenen Byte im entsprechenden Byte -Stream 0x6b.
(06) Bais.read (buf, 0, len); Dieser Satz lautet "Lesen Sie Len -Daten aus dem Byte -Stream und schreiben Sie ihn in BUF, 0 bedeutet, aus der 0. Position von BUF zu schreiben".
(07) bais.reset (); Dieser Satz setzt "die nächste gelesene Position im Byte -Stream" auf "die von Mark () markierte Position zurück, dh 0x66.
Nach dem Erlernen des BytearrayInputStream -Eingabestreams. Als nächstes lernen wir den entsprechenden Ausgangsstrom -BytearrayoutputStream.
BytearrayoutputStream -Einführung
BytearrayoutputStream ist ein Byte -Array -Ausgangsstrom. Es erbt vom Ausgangsstream.
Die Daten in BytearrayoutputStream werden in ein Byte -Array geschrieben. Der Puffer wächst automatisch, wenn die Daten kontinuierlich geschrieben werden. Daten können mit Tobytearray () und ToString () erhalten werden.
Beispielcode zur detaillierten Verwendung der API in BytearrayoutputStream finden Sie im Beispielcode (BytearrayoutputStreamtest.java):
Importieren Sie java.io.ioxception; import Java.io.outputStream; Import Java.io.BytearrayoutputStream; Import Java.io.io.BytearrayInputStream; // Corresponding to the English letter "abcddefghijklmnopqrsttuvwxyz" private static final byte[] ArrayLetters = { 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a}; public static void main (String [] args) {// String tmp = new String (Arrayletter); //System.out.println("Arrayletters="++TMP); tesbytearrayoutputStream (); } / ** * bytearrayoutputStream API -Testfunktion * / private statische void tesbytearrayoutputStream () {// bytearrayoutputStream Byte -Stream BytearrayoutputStream baos = new bytearrayoutputStream (); // Schreiben Sie drei Buchstaben "A", "B" und "C" wiederum. 0x41 entspricht A, 0x42 entspricht B und 0x43 entspricht C. baos.write (0x41); Baos.Write (0x42); baos.write (0x43); System.out.printf ("baos =%s/n", baos); // Schreiben Sie die letzten 5 Bytes aus "3" in das Arrayletter -Array in Baos. // Das heißt, "0x64, 0x65, 0x66, 0x67, 0x68" ist entsprechend geschrieben, dh "Defgh" Baos.Write (Arrayletters, 3, 5); System.out.printf ("baos =%s/n", baos); // Berechnen Sie die Länge int size = baos.size (); System.out.printf ("size =%s/n", Größe); // in Byte [] Array Byte [] buf = baos.tobytearray () konvertieren; String str = new String (BUF); System.out.printf ("Str =%s/n", str); // in Byte [] Array Byte [] buf = baos.tobytearray () konvertieren; String str = new String (BUF); System.out.printf ("Str =%s/n", str); // Baos in einen anderen Ausgabestream schreiben {bytearrayoutputStream baos2 = new bytearrayoutputStream (); baos.writeto ((outputStream) baos2); System.out.printf ("baos2 =%s/n", baos2); } catch (ioException e) {e.printstacktrace (); }}} Auslaufergebnisse:
Baos = ABCBAOS = ABCDEFGHSIZE = 8STR = ABCDEFGHBAOS2 = ABCDEFGH