Introdução de bytearrayInputStream
BytearrayInputStream é um fluxo de entrada de matriz de bytes. Herda do InputStream.
Ele contém um buffer interno que contém bytes lidos no fluxo; Nos termos do Layman, seu buffer interno é uma matriz de bytes, e o BytearrayInputStream é essencialmente implementado através de uma matriz de bytes.
Todos sabemos que o InputStream fornece interfaces externas através do read () para que eles leiam dados de bytes; Enquanto o ByteArrayInputStream define internamente um contador adicional usado para rastrear o próximo byte a ser lido pelo método read ().
Código de amostra para uso detalhado da API no bytearrayInputStream, consulte o código de amostra (bytearrayInputStreamTest.java):
importar java.io.byteArrayInputStream; importar java.io.bytearrayoutputStream;/*** ByteArrayInputStream Programa de teste*/classe pública 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 (); } / ** * Função de teste da API de ByteArrayInputStream * / Void estático privado TesbyteArrayInputStream () {// Crie byteArrayInputStream Byte Stream, o conteúdo é ArrayLetters ArrayIrrayInputStream Bais = new ByteArraRrayInTream (Arrayletters); // Leia 5 bytes do fluxo de bytes para (int i = 0; i <len; i ++) {// Se você puder continuar lendo o próximo byte, leia o próximo byte if (Bais.AVALELable ()> = 0) {// Leia "Next Byte do byte stream" int tmp = Bais.read (); System.out.printf ("%d: 0x%s/n", i, integer.tohexstring (tmp)); }} // Se "este fluxo de bytes" não suporta a função de marcação, saia diretamente se (! Bais.marksupported ()) {System.out.println ("faça não suportado!"); retornar ; } // Marque "a próxima posição de leitura no fluxo de bytes". Isto é, - marque "0x66", porque 5 bytes foram lidos antes, a próxima posição de leitura é o 6º byte "// (01)," Parâmetro 0 "na função Mark (0) da ByteArrayInputStream Classe não tem significância prática. BAIS.Mark (0). BAIS.Read (BUF, 0, LEN); o fluxo de bytes "para" a posição marcada por mark () ", isto é, 0x66. Bais.reset (); // Leia 5 bytes do" Redefinir Byte Stream "no buf. Ou seja, leia" 0x66, 0x67, 0x68, 0x69, 0x6a "Bis.read. (0x67, 0x68, 0x69, 0x6a" Bis.read. // converte BUF em uma string string. O caractere correspondente de "0x66, 0x67, 0x68, 0x69, 0x6a" é "fghij" string str2 = new string (buf); System.out.printf ("str2 =%s/n", str2); }} Resultados em execução:
ArrayLetters = abcdefghijklmnopqrstuvwxyz0: 0x611: 0x622: 0x633: 0x644: 0x65str1 = klmnostr2 = fghij
Resultados Descrição:
(01) ArrayLetters é uma matriz de bytes. O valor do código ASCII correspondente a 0x61 é a, o valor do código ASCII correspondente a 0x62 é B e assim por diante ...
(02) byteArrayInputStream Bais = new ByteArrayInputStream (ArrayLetters); Esta frase é criar "Byte Stream Bais", e seu conteúdo é ArrayLetters.
(03) para (int i = 0; i <len; i ++); O objetivo disso para o loop é ler 5 bytes do fluxo de bytes. Cada vez que Bais.read () é chamado, um byte é lido no fluxo de bytes.
(04) Bais.Mark (0); Esta frase está "defina a marca do fluxo de bytes". Neste momento, o valor correspondente da posição da marca é 0x66.
(05) Bais.skip (5); Esta frase é para pular 5 bytes. Depois de pular 5 bytes, o valor do próximo byte de leitura no fluxo de bytes correspondente é 0x6b.
(06) Bais.read (BUF, 0, Len); Esta frase é "lida dados do fluxo de bytes e escrevê -los no BUF, 0 significa escrever na posição 0ª do BUF".
(07) Bais.Reset (); Esta frase redefine "A próxima posição de leitura no fluxo de bytes" para "a posição marcada por Mark ()", ou seja, 0x66.
Depois de aprender o fluxo de entrada BytearTrayInputStream. Em seguida, aprendemos o fluxo de saída correspondente BytearRayOutputStream.
Introdução de bytearrayOutputStream
BytearrayOutputStream é um fluxo de saída de matriz de bytes. Herda do outputStream.
Os dados no BytearRayOutputStream são gravados em uma matriz de bytes. O buffer crescerá automaticamente à medida que os dados são escritos continuamente. Os dados podem ser obtidos usando o TobyTearray () e o ToString ().
Código de amostra para uso detalhado da API no ByTearRayOutputStream, consulte o código de amostra (bytearrayoutputStreamTest.java):
importar java.io.ioException; importar java.io.OutputStream; importar java.io.byteArrayoutputStream; importar java.io.bytearrayinputStream;/** * ByteArrayoutTream Test Program {private STETTION STETRATION STEMWANG */LLATE PÚBLICA BYTRAYORAYOUTSTREAMTest {private stester stening * skywang */ltle public byteraRayaRaRapTreamTest {private steningn start 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("ArrayLetters="+tmp); tesbyteArrayOutputStream (); } / ** * ByteArrayOutputStream Função de teste da API * / private estático void tesbyteArrayoutputStream () {// Crie byteArrayOutputStream byte stream bytearrayoutputStream baos = new ByteArrayOutputStream (); // Escreva três letras "A", "B" e "C" por sua vez. 0x41 corresponde a A, 0x42 corresponde a B e 0x43 corresponde a C. Baos.Write (0x41); baos.write (0x42); baos.write (0x43); System.out.printf ("Baos =%s/n", Baos); // Escreva os últimos 5 bytes de "3" na matriz dos Arrayletters no Baos. // isto é, "0x64, 0x65, 0x66, 0x67, 0x68" é escrito correspondentemente, ou seja, "Defgh" baos.write (ArrayLetters, 3, 5); System.out.printf ("Baos =%s/n", Baos); // calcule o comprimento int size = baos.size (); System.out.printf ("size =%s/n", tamanho); // converter em byte [] Array byte [] buf = baos.tobytearray (); String str = new String (BUF); System.out.printf ("str =%s/n", str); // converter em byte [] Array byte [] buf = baos.tobytearray (); String str = new String (BUF); System.out.printf ("str =%s/n", str); // Escreva Baos em outro fluxo de saída, tente {byteArrayOutputStream Baos2 = new ByteArrayOutputStream (); Baos.WritEto (((outputStream) Baos2); System.out.printf ("Baos2 =%s/n", Baos2); } catch (ioexception e) {e.printStackTrace (); }}} Resultados em execução:
Baos = abcbaos = abcdefghsize = 8str = abcdefghbaos2 = abcdefgh