BytearrayInputStream Introducción
ByteArrayInputStream es una secuencia de entrada de la matriz de bytes. Hereda de InputStream.
Contiene un búfer interno que contiene bytes leídos de la transmisión; En términos de Layman, su búfer interno es una matriz de bytes, y BytearrayInputStream se implementa esencialmente a través de una serie de bytes.
Todos sabemos que InputStream proporciona interfaces hacia afuera a través de Read () para que lean datos de bytes; mientras que ByteArrayInputStream define internamente un contador adicional que se utiliza para rastrear el siguiente byte que se lee mediante el método Read ().
Código de muestra para el uso detallado de API en bytearrayInputStream, consulte el código de muestra (bytearrayInputStreamTest.java):
import java.io.bytearrayInputStream; import java.io.bytearRaReOutputStream;/*** 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 Función * / Private static void tesbytearrayInputPutStream () {// Crear ByteArrayInputStream Byte Stream, el contenido es ArrayLetters Array bytearrayInputStream Bais = new ByteArrayStream (ArrayTletters); // Leer 5 bytes de la transmisión de byte para (int i = 0; i <len; i ++) {// Si puede continuar leyendo el siguiente byte, lea el siguiente byte if (bais.available ()> = 0) {// Read "Siguiente byte de la corriente de byte" int tmp = bais.read (); System.out.printf ("%d: 0x%s/n", i, integer.tohexstring (tmp)); }} // Si "esta transmisión de byte" no es compatible con la función de marcado, luego salga directamente si (! Bais.markSupported ()) {System.out.println ("¡No sea compatible!"); devolver ; } // Marque "La siguiente posición de lectura en la transmisión de bytes". Es decir, - Mark "0x66", porque se han leído 5 bytes antes, la siguiente posición de lectura es el sexto byte "// (01)," Parámetro 0 "en la función Mark (0) de la clase byteArrayInputStream no tiene un significado práctico. // (02), mark () y reset () están coincidentes, restablecerá () reiniciar" la siguiente posición de lectura en el stream de la corriente de la red "la marca" () () () () () Bais.Mark (0); Bais.read (buf, 0, len); La transmisión de byte "a" la posición marcada por Mark () ", es decir, 0x66. Bais.reset (); // Leer 5 bytes de la" transmisión de byte de reinicio "en el buf. es decir, leer" 0x66, 0x67, 0x68, 0x69, 0x6a "Bais.Read (buf, 0, len); // Convertir BUF en una cadena de cadena. El carácter correspondiente de "0x66, 0x67, 0x68, 0x69, 0x6a" es la cadena "fghij" str2 = new String (buf); System.out.printf ("str2 =%s/n", str2); }} Resultados de ejecución:
ArrayLetters = ABCDEFGHIJKLMNOPQRSTUVWXYZ0: 0x611: 0x622: 0x633: 0x644: 0x65Str1 = klmnostr2 = fghij
Descripción de los resultados:
(01) ArrayLetters es una matriz de bytes. El valor del código ASCII correspondiente a 0x61 es A, el valor del código ASCII correspondiente a 0x62 es B, y así sucesivamente ...
(02) byteArrayInputStream BAIS = new ByteArrayInputStream (ArrayLetters); Esta oración es crear "Byte Stream Bais", y su contenido es ArrayLetters.
(03) para (int i = 0; i <len; i ++); El propósito de esto para bucle es leer 5 bytes de la transmisión de bytes. Cada vez que se llama BAIS.Read (), se lee un byte de la transmisión de bytes.
(04) Bais.mark (0); Esta oración es "Establecer la marca de la transmisión de bytes". En este momento, el valor correspondiente de la posición de la marca es 0x66.
(05) Bais.skip (5); Esta oración es omitir 5 bytes. Después de omitir 5 bytes, el valor del siguiente byte de lectura en el flujo de byte correspondiente es 0x6b.
(06) Bais.read (Buf, 0, Len); Esta oración es "Leer datos de LEN de la transmisión de bytes y escribirlo en BUF, 0 significa escribir desde la posición 0 de BUF".
(07) bais.reset (); Esta oración restablece "la siguiente posición de lectura en la secuencia de bytes" a "la posición marcada por Mark ()", es decir, 0x66.
Después de aprender el ByteArrayInputStream Input Stream. A continuación, aprendemos la transmisión de salida correspondiente bytearRaReOutputStream.
BytearRayOutputStream Introducción
ByteArRayOutputStream es una secuencia de salida de la matriz de bytes. Hereda de OutputStream.
Los datos en ByteArRayOutputStream se escriben en una matriz de bytes. El búfer crecerá automáticamente a medida que los datos se escriben continuamente. Los datos se pueden obtener usando tobytearray () y toString ().
Código de muestra para el uso detallado de API en bytearRayOutputStream, consulte el código de muestra (bytearRayOutputStreamTest.java):
import java.io.ioException; import java.io.outputstream; import java.io.bytearrayOutputStream; import java.io.bytearrayInputStream;/** * ByteTearRAyRautputStream Test Program * * @Author Skywang */public class ByteArpetStreamTeamTest {Private Static intent = 5; // correspondiente a la letra inglesa "abcddefghijklmnopqrsttvwxyz" byte final estático privado [] arrayletters = {0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6e, 0x6e, 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); tesbytearRayOutputStream (); } / ** * ByteArAyOutputStream API Función de prueba * / Private static void tesbyTearRayOutputStream () {// Crear byteArrayOutputStream byte stream byteArRaYoutputStream Baos = new ByTearRauteutPututPutPutStream (); // Escribe tres letras "A", "B" y "C" a su vez. 0x41 corresponde a A, 0x42 corresponde a B, y 0x43 corresponde a C. baos.write (0x41); baos.write (0x42); baos.write (0x43); System.out.printf ("baos =%s/n", baos); // Escribe los últimos 5 bytes de "3" en la matriz Arrayletters en Baos. // es decir, "0x64, 0x65, 0x66, 0x67, 0x68" se escribe correspondientemente, es decir, "defgh" baos.write (Arrayletters, 3, 5); System.out.printf ("baos =%s/n", baos); // Calcule la longitud int size = baos.size (); System.out.printf ("size =%s/n", tamaño); // convertir a byte [] array byte [] buf = baos.tobytearray (); Cadena str = new String (buf); System.out.printf ("str =%s/n", str); // convertir a byte [] array byte [] buf = baos.tobytearray (); Cadena str = new String (buf); System.out.printf ("str =%s/n", str); // Escribe baos en otro flujo de salida try {bytearRayOutputStream Baos2 = new ByteArRayOutputStream (); baos.writeTo ((outputStream) Baos2); System.out.printf ("Baos2 =%S/N", Baos2); } catch (ioException e) {E.PrintStackTrace (); }}} Resultados de ejecución:
baos = abcbaos = abcdefghsize = 8str = abcdefghbaos2 = abcdefgh