BytearrayinputStream Введение
Bytearrayinptstream - это входной поток байтового массива. Это наследует от inputstream.
Он содержит внутренний буфер, который содержит байты, считываемые из потока; С точки зрения непрофессионала, его внутренний буфер представляет собой массив байтов, а Bytearrayinptstream по существу реализован через массив байтов.
Мы все знаем, что InputStream предоставляет интерфейсы наружу через read () для чтения данных байтов; В то время как Bytearrayinptstream внутренне определяет дополнительный счетчик, который используется для отслеживания следующего байта, который будет прочитан методом read ().
Пример кода для подробного использования API в Bytearrayinptstream, см. Пример кода (Bytearrayinptstreamtest.java):
Импорт java.io.bytearrayinputstream; import java.io.bytearrayoutputstream;/*** Bytearrayinptstream Программа испытаний*/public class bytearrayinptstreamtest {private static final int len = 5; // Соответствует английскому письму "Abcddefghijklmnopqrssttuvwxyz" частный статический байт [] arrayletters = {0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6c, 0x6, 0x68, 0x69, 0x6a, 0x6c, 0x6, 0x68, 0x69, 0x6a. 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 (); } / ** * BytearRayinptStream Test Function * / Private Static void TesbyTearRayInputStream () {// Создание байтового потока BytearRayinptream, содержимое Arrayletters Arrayletters Bytearrayinptream bais = new Bytearrayinpream (Arrayletters); // Читать 5 байтов из байтового потока для (int i = 0; i <len; i ++) {// Если вы можете продолжать читать следующий байт, прочитайте следующий байт if (bais.available ()> = 0) {// Читать «Следующий байт байтового потока» int tmp = bais.read (); System.out.printf ("%d: 0x%s/n", i, integer.tohexstring (tmp)); }} // Если «этот байтовый поток» не поддерживает функцию маркировки, то выходите непосредственно, если (! Bais.marksupported ()) {System.out.println («Сделай не поддерживается!»); возвращаться ; } // Отметьте «Следующая позиция чтения в байтовом потоке». That is, -- mark "0x66", because 5 bytes have been read before, the next read position is the 6th byte" // (01), "parameter 0" in the mark(0) function of ByteArrayInputStream class has no practical significance. // (02), mark() and reset() are matching, reset() will reset "the next read position in the byte stream" to "the saved position in the mark () "bais.mark (0); // Пропустить 5 байт. После прохождения 5 байтов следующим значением чтения в байтовом потоке должно быть" 0x6b ". Bais.skip (5); // Читать 5 данных из Byte Stream. То есть. Bais.read (Buf, 0, Len); байтовый поток «до« позиции, отмеченной mark () », то есть 0x66. Bais.reset (); // Читать 5 байтов из« сброса Byte Stream »в Buf. То есть, прочитайте« 0x66, 0x67, 0x68, 0x69, 0x6a »bais.read (buf, 0, len); // конвертировать BUF в строку строки. Соответствующий символ «0x66, 0x67, 0x68, 0x69, 0x6a» - это «fghij» String Str2 = new String (buf); System.out.printf ("str2 =%s/n", str2); }} Результаты работы:
Arrayletters = abcdefghijklmnopqrstuvwxyz0: 0x611: 0x622: 0x633: 0x644: 0x65str1 = klmnoStr2 = fghij
Результаты Описание:
(01) Аррайлтерс - это байт -массив. Значение кода ASCII, соответствующее 0x61, является A, значение кода ASCII, соответствующее 0x62, IS B, и т. Д.
(02) Bytearrayinptstream bais = new Bytearrayinputstream (Arrayletters); Это предложение состоит в том, чтобы создать «байтовый поток байс», а его контент - сборщики.
(03) для (int i = 0; i <len; i ++); Цель этого для цикла состоит в том, чтобы прочитать 5 байтов из байтового потока. Каждый раз, когда называется bais.read (), один байт читается из байтового потока.
(04) bais.mark (0); Это предложение «установлена отметка байтового потока». В настоящее время соответствующее значение позиции Марка составляет 0x66.
(05) bais.skip (5); Это предложение состоит в том, чтобы пропустить 5 байт. После пропуска 5 байтов значение следующего чтения байта в соответствующем байтовом потоке составляет 0x6b.
(06) bais.read (buf, 0, len); Это предложение «прочитать данные LEN из байтового потока и написать его в BUF, 0 означает написание с 0 -й позиции BUF».
(07) bais.reset (); Это предложение сбрасывает «следующую позицию чтения в байтовом потоке» на «позицию, отмеченную Mark ()», то есть 0x66.
После изучения входного потока Bytearrayinptstream. Затем мы изучаем соответствующий выходной поток BytearrayOutputStream.
BytearrayOutputStream Введение
BytearrayOutputStream - это выходной поток байтового массива. Это наследует от OutputStream.
Данные в BytearrayOutputStream записываются на байтовую массив. Буфер автоматически будет расти по мере постоянного написания данных. Данные можно получить с помощью tobytearray () и tostring ().
Пример кода для подробного использования API в BytearRayoutputStream, см. Пример кода (BytearRayoutputStreamTest.java):
Импорт java.io.ioexception; import java.io.outputstream; импорт java.io.bytearrayoutputstream; import java.io.bytearrayinptstream;/** * bytearrayoutputstream Программа испытаний * * @author skywang */public class bytearrayoutputestest {private static inte int len = 5; // 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 Test Function * / private static void tesbytearRayoutputStream () {// Создать BytearRayOutputStream Byte Stream BytearRayOutputStream baos = new BytearRayOutputStream (); // написать три буквы «a», «b» и «c» по очереди. 0x41 соответствует A, 0x42 соответствует B, а 0x43 соответствует C. baos.write (0x41); baos.write (0x42); baos.write (0x43); System.out.printf ("baos =%s/n", baos); // Напишите последние 5 байтов из «3» в массиве Аррейсалтеров в Баос. // то есть "0x64, 0x65, 0x66, 0x67, 0x68" соответственно, то есть «defgh» baos.write (Arrayletters, 3, 5); System.out.printf ("baos =%s/n", baos); // Рассчитать длину int size = baos.size (); System.out.printf ("size =%s/n", size); // преобразовать в байт [] массив байт [] buf = baos.tobytearray (); String str = new String (buf); System.out.printf ("str =%s/n", str); // преобразовать в байт [] массив байт [] buf = baos.tobytearray (); String str = new String (buf); System.out.printf ("str =%s/n", str); // Написать BAOS в другой выходной поток Try {BytearRayOutputStream baos2 = new BytearRayoutputStream (); baos.writeto (((outputstream) baos2); System.out.printf ("baos2 =%s/n", baos2); } catch (ioException e) {e.printstackTrace (); }}} Результаты работы:
baos = abcbaos = abcdefghsize = 8str = abcdefgaos2 = abcdefgh