ByteArrayInputStream Introduction
ByteArrayInputStream est un flux d'entrée du tableau d'octets. Il hérite de InputStream.
Il contient un tampon interne qui contient des octets lus dans le flux; En termes de laïque, son tampon interne est un tableau d'octets, et ByteArrayInputStream est essentiellement mis en œuvre via un tableau d'octets.
Nous savons tous que InputStream fournit des interfaces vers l'extérieur via read () pour qu'ils lisent les données d'octets; tandis que ByteArrayInputStream définit en interne un compteur supplémentaire qui est utilisé pour suivre l'octet suivant à lire par la méthode read ().
Exemple de code pour une utilisation détaillée de l'API dans ByteArrayInputStream, reportez-vous à l'exemple de code (ByteArrayInputStreamTest.java):
import java.io.bytearrayinputStream; import java.io.bytearrayoutputStream; / ** * bytearrayInputStream Test Program * / public class byteArrayInputStreamTest {private static final int len = 5; // Corresponding to the English letter "abcddefghijklmnopqrssttuvwxyz" 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 (arrayletters); System.out.println ("Arrayletters =" + tmp); TesByTearrayInputStream (); } / ** * ByteArrayInputStream API Test Fonction * / private static void TesByTearrayInputStream () {// Créer ByteArrayInputStream Byte Stream, le contenu est Arrayletters Array BytearRayInputStream Bais = New ByteArrayInputStream (Arrayletters); // Lire 5 octets du flux d'octets pour (int i = 0; i <len; i ++) {// Si vous pouvez continuer à lire l'octet suivant, lisez l'octet suivant if (bais.available ()> = 0) {// lire "l'octet suivant du flux d'octet" int tmp = bais.read (); System.out.printf ("% d: 0x% s / n", i, Integer.tohexString (TMP)); }} // Si "ce flux d'octet" ne prend pas en charge la fonction de marquage, alors quittez directement si (! Bais.markSupported ()) {System.out.println ("Make Not SupportEd!"); retour ; } // Marque "La position de lecture suivante dans le flux d'octet". C'est-à-dire - Mark "0x66", car 5 octets ont déjà été lus, la position de lecture suivante est la fonction de 6e octet "// (01)," Paramètre 0 "dans la fonction Mark (0) de ByteArrayInputStream n'a aucune signification pratique. // (02), Mark () et REAT () est adaptée, réinitialisera dans la position de réseaux" Mark () "bais.mark (0); // sauter 5 octets. Après avoir sauté 5 octets, la valeur de lecture suivante dans le flux d'octet devrait être" 0x6b ". Bais.skip (5); // Read 5 données du flux d'octet. C'est-à-dire, lecture" 0x6b, 0x6c, 0x6d, 0x6e, 0x6f "byte [] buf = neuf [l by-); Bais.read (buf, 0, Len); Dans le flux d'octet "à" la position marquée par Mark () ", c'est-à-dire 0x66. Bais.reset (); // Lire 5 octets du" Stream d'octet de réinitialisation "dans le buf. C'est-à-dire, lire" 0x66, 0x67, 0x68, 0x69, 0x6a "Bais.read (buf, 0, lun); // Convertir BUF en une chaîne de chaîne. Le caractère correspondant de "0x66, 0x67, 0x68, 0x69, 0x6a" est "fghij" String str2 = new String (buf); System.out.printf ("str2 =% s / n", str2); }} Résultats en cours:
Arrayletters = ABCDEFGHIJKLMNOPQRSTUVWXYZ0: 0x611: 0x622: 0x633: 0x644: 0x65str1 = klmnostr2 = fghij
Description des résultats:
(01) Arrayletters est un tableau d'octets. La valeur de code ASCII correspondant à 0x61 est A, la valeur de code ASCII correspondant à 0x62 est B, et ainsi de suite ...
(02) ByteArrayInputStream Bais = new ByteArrayInputStream (Arrayletters); Cette phrase consiste à créer "Bais Bais", et son contenu est des arraytters.
(03) pour (int i = 0; i <len; i ++); Le but de cela pour Loop est de lire 5 octets du flux d'octets. Chaque fois que Bais.read () est appelé, un octet est lu à partir du flux d'octets.
(04) Bais.mark (0); Cette phrase est "Définir la marque du flux d'octets". À l'heure actuelle, la valeur correspondante de la position de marque est 0x66.
(05) Bais.skip (5); Cette phrase doit sauter 5 octets. Après avoir sauté 5 octets, la valeur de l'octet de lecture suivant dans le flux d'octets correspondant est 0x6b.
(06) bais.read (buf, 0, len); Cette phrase est "Lisez les données LEN du flux d'octets et l'écrivez dans BUF, 0 signifie écrire à partir de la 0e position de BUF".
(07) bais.reset (); Cette phrase réinitialise "la position de lecture suivante dans le flux d'octets" à "la position marquée par Mark ()", c'est-à-dire 0x66.
Après avoir appris le flux d'entrée ByteArrayInputStream. Ensuite, nous apprenons le flux de sortie correspondant bytearrayoutputStream.
ByteArrayoutputStream Introduction
ByteArrayOutputStream est un flux de sortie du tableau d'octets. Il hérite de OutputStream.
Les données dans ByteArrayOutputStream sont écrites sur un tableau d'octets. Le tampon se développera automatiquement à mesure que les données sont en continu. Les données peuvent être obtenues en utilisant TobyTearray () et ToString ().
Exemple de code pour une utilisation détaillée de l'API dans ByteArrayoutputStream, reportez-vous à l'exemple de code (bytearrayoutputStreamTest.java):
Importer java.io.ioException; import java.io.outputstream; import java.io.bytearrayoutputStream; import java.io.bytearrayinputStream; / ** * bytearrayoutStream test * * @author skywang * / public classe; // 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 (arrayletters); //System.out.println("Arrayleters="+TMP); TesByTearrayOutputStream (); } / ** * ByteArrayOutputStream API Test Fonction * / private static void TesByTearrayoutputStream () {// Créer ByteArrayOutputStream Byte Stream ByteArrayOutStream baos = new ByteArrayOutputStream (); // Écrivez trois lettres "A", "B" et "C" à son tour. 0x41 correspond à A, 0x42 correspond à B, et 0x43 correspond à C. baos.write (0x41); baos.write (0x42); baos.write (0x43); System.out.printf ("baos =% s / n", baos); // Écrivez les 5 derniers octets de "3" dans le tableau Arraytters en BAOS. // c'est-à-dire "0x64, 0x65, 0x66, 0x67, 0x68" est écrit en conséquence, c'est-à-dire "defgh" baos.write (Arrayletters, 3, 5); System.out.printf ("baos =% s / n", baos); // Calculez la longueur int size = baos.size (); System.out.printf ("Size =% S / N", taille); // Convertir en octet [] byte byte [] buf = baos.toByteArray (); String str = new String (buf); System.out.printf ("str =% s / n", str); // Convertir en octet [] byte byte [] buf = baos.toByteArray (); String str = new String (buf); System.out.printf ("str =% s / n", str); // Écrivez BAOS dans un autre flux de sortie essayez {bytearrayoutputStream baos2 = new bytearrayoutputStream (); Baos.WriteTo ((OutputStream) BaOS2); System.out.printf ("baos2 =% s / n", baos2); } catch (ioException e) {e.printStackTrace (); }}} Résultats en cours:
baos = abcbaos = abcdefghsize = 8str = abcdefghbaos2 = abcdefgh