bytearrayinputStreamはじめに
bytearrayinputStreamは、バイト配列入力ストリームです。 inputstreamから継承します。
ストリームから読み取られたバイトを含む内部バッファが含まれています。素人の用語では、その内部バッファーはバイトの配列であり、ByTearRayInputStreamは基本的に一連のバイトを介して実装されます。
inputstreamがread()を介して外側にインターフェイスを提供して、byteデータを読み取るためのインターフェイスを外側に提供することを知っています。一方、bytearrayinputStreamは、read()メソッドで読み取られる次のバイトを追跡するために使用される追加のカウンターを内部的に定義します。
サンプルコードbytearrayinputStreamでのAPIの詳細な使用法については、サンプルコード(bytearrayinputStreamTest.java)を参照してください。
java.io.io.bytearrayinputStream; Import java.io.io.bytearrayoutputStream;/*** bytearrayinputStreamテストプログラム*/public class bytearrayinputStreamtest {private static final int len = 5; //英語の手紙に対応する「abcddefghijklmnopqrssttuvwxyz "private static final byte [] arrayletters = {0x61、0x62、0x63、0x64、0x65、0x66、0x67、0x68、0x69、0x6a、0x6b、0x6b、0x6b、0x6b、0x6b 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テスト関数 * / private static void tesbytearrayinputStream(){// BytearrayinputStreamバイトストリームを作成すると、コンテンツはArrayletters ArrayLayInputStream bais = new bytearrayinputStream(arrayletters); //バイトストリームから5バイトを読み取ります(int i = 0; i <len; i ++){//次のバイトを読み続けることができる場合は、次のバイトを読み取ります。 System.out.printf( "%d:0x%s/n"、i、integer.tohexstring(tmp)); }} //「このバイトストリーム」がマーキング関数をサポートしていない場合、(!bais.marksupported()){system.out.println( "サポートしない!");戻る ; } //「バイトストリームの次の読み取り位置」をマークします。つまり、5バイトが以前に読み取られたため、「0x66」マーク「0x66」、次の読み取り位置は6番目のバイト「//(01)、bytearrayinputStreamのマーク(0)関数のパラメーター0」です。 bais.mark(0)5バイトをスキップした後、「0x6b」(5)を読み取ります。 bais.read(buf、len);バイトストリームは、「マーク()」によってマークされた位置、つまり0x66。bais.reset()によってマークされた位置を "に"からbuis.ted "0x66、0x67、0x68、0x69、0x69、0x6a" bais.read(bus、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)Arraylettersはバイト配列です。 0x61に対応するASCIIコード値はA、0x62に対応するASCIIコード値はBなど...
(02)bytearrayinputStream bais = new bytearrayinputStream(arrayletters);この文は、「バイトストリームBAI」を作成することであり、そのコンテンツはArraylettersです。
(03)for(int i = 0; i <len; i ++);ループのこの目的は、バイトストリームから5バイトを読み取ることです。 bais.read()が呼び出されるたびに、1つのバイトがバイトストリームから読み取られます。
(04)bais.mark(0);この文は「バイトストリームのマークを設定」です。この時点で、マーク位置の対応する値は0x66です。
(05)bais.skip(5);この文は、5バイトをスキップすることです。 5バイトをスキップした後、対応するバイトストリームの次の読み取りバイトの値は0x6bです。
(06)bais.read(buf、0、len);この文は「バイトストリームからレンデータを読み取り、それをBUFに書き込み、0はBUFの0番目の位置から書き込むことを意味します」です。
(07)bais.reset();この文は、「バイトストリームの次の読み取り位置」を「Mark()によってマークされた位置、つまり0x66に「次の読み取り位置」をリセットします。
ByTearRayInputStream入力ストリームを学習した後。次に、対応する出力ストリームbytearrayoutputStreamを学習します。
bytearrayoutputStreamはじめに
bytearrayoutputStreamは、バイト配列出力ストリームです。 OutputStreamから継承します。
bytearrayoutputStreamのデータは、バイト配列に書き込まれます。データが継続的に記述されると、バッファーは自動的に成長します。 Tobytearray()およびtoString()を使用してデータを取得できます。
bytearrayoutputStreamでのAPIの詳細な使用法のサンプルコード、サンプルコード(bytearrayoutputStreamTest.java)を参照してください。
java.io.ioexception; Import java.io.outputStream; Import java.io.bytearrayoutputStream; Import java.io.io.bytearrayinputStream;/** * bytearrayoutputStreamテストプログラム * * @author skywang */public class bytearrayoutputtest {prival intic int len = 5; //英語の手紙に対応する「abcddefghijklmnopqrsttuvwxyz "private static final byte [] arrayletters = {0x61、0x62、0x63、0x64、0x65、0x66、0x67、0x68、0x69 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 APIテスト関数 * / private static void tesbytearrayoutputStream(){// bytearrayoutputStreamバイトストリームBytearrayoutputStream baos = new bytearrayoutputStream(); //順番に3文字「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); // arrayletters配列の「3」から最後の5バイトをBAOSに書き込みます。 //つまり、「0x64、0x65、0x66、0x67、0x68」は、それに応じて書かれています。 System.out.printf( "baos =%s/n"、baos); //長さint size = baos.size(); System.out.printf( "size =%s/n"、size); // byte [] array byte [] buf = baos.tobytearray()に変換します。 string str = new String(buf); System.out.printf( "str =%s/n"、str); // byte [] array byte [] 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 = abcdefghbaos2 = abcdefgh