BufferedInputStream
BufferedInputStreamは、バッファーされた入力ストリームです。 FilterInputStreamから継承します。
BufferedInputStreamの目的は、「バッファリング機能」の提供や「マーク()マーク」と「リセット()リセットメソッド」をサポートするなど、別の入力ストリームにいくつかの機能を追加することです。
BufferedInputStreamは、基本的に内部バッファアレイを介して実装されています。たとえば、特定の入力ストリームに対応するBufferedInputStreamを作成した後、read()を介して入力ストリームのデータを読むと、bufferedinputStreamが入力ストリームのデータをバッチ内のバッファーに入力します。バッファ内のデータが読み取られるたびに、入力ストリームは再びデータバッファーを埋めます。これは、入力ストリームデータの場所の読み取りが完了するまで繰り返されます。
BufferedInputStream機能リスト:
bufferedinputStream(inputstream in)bufferedinputStream(inputStream in、int size)同期int close()void close()同期void mark()readlimit(int readlimit)ブールマルクポート()同期されたreadized read()同期read()同期read(byte)synchronized void( bytecount)
サンプルコード:
BufferedInputStreamでのAPIの詳細な使用については、例コード(BufferedInputStreamTest.java)を参照してください。
java.io.bufferedinputStream;インポートjava.io.io.bytearrayinputStream;インポートjava.io.file;インポートjava.io.inputStream; Import java.io.io.io.ioexception; Import java.io.io.fileNotFoundexception; BufferedInputStream Test Program * * @Author Skywang */Public Class BufferedInputStreamTest {private static final int len = 5; public static void main(string [] args){testbufferedinputStream(); } / *** bufferedinputStreamのAPIテスト関数* / private static void testiC bufferedinputStream(){// bufferedinputStreamバイトストリームの作成、コンテンツはarraylettersアレイ{file file = new file( "bufferedinputStream.txt"); inputStream in = new BufferedInputStream(new FileInputStream(file)、512); //バイトストリームから5バイトを読み取ります。 「ABCDE」、Aは0x61に対応し、Bは0x62に対応します。 System.out.printf( "%d:0x%s/n"、i、integer.tohexstring(tmp)); }} //「このバイトストリーム」がマーキング関数をサポートしていない場合、(!in.marksupported()){system.out.println( "support not supported!");戻る ; } //「現在のインデックス位置」、つまり、6番目の位置の要素をマークします - "f" // 1024はmarklimit in.mark(1024)に対応します。 // 22バイトをスキップします。 in.skip(22); // 5 bytes byte [] buf = new byte [len]; in.read(buf、0、len); // bufを文字列文字列に変換します。 string str1 = new String(buf); System.out.printf( "str1 =%s/n"、str1); //「入力ストリームのインデックス」をMark()によってマークされた位置にリセットします。つまり、「F」にリセットされます。 in.reset(); //「リセットバイトストリーム」から5バイトをBUFに読み取ります。つまり、「fghij」in.read(buf、0、len)を読みます。 // bufを文字列文字列に変換します。 string str2 = new String(buf); System.out.printf( "str2 =%s/n"、str2); in.close(); } catch(filenotfoundexception e){e.printstacktrace(); } catch(securityexception e){e.printstacktrace(); } catch(ioexception e){e.printstacktrace(); }}} BufferedInputStream.txtの内容は、プログラムで読み取られます。
abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz
実行結果:
0:0x611:0x622:0x633:0x644:0x65STR1 = 01234STR2 = FGHIJ
BufferedOutputStream
BufferedOutputStreamは、バッファーの出力ストリームです。 FilterOutputStreamから継承します。
BufferedOutputStreamの機能は、別の出力ストリームに「バッファリング」を提供することです。
BufferedOutputStream機能リスト:
bufferedoutputStream(outputStream out)bufferedOutputStream(outputStream out、int size)同期ボイドclose()同期ボイドフラッシュ()同期ボイド書き込み(byte []バッファー、intオフセット、int length)同期ボイド書き込み(int obebyte)(int onebyte)
サンプルコード:
BufferedOutputStreamでのAPIの詳細な使用については、サンプルコード(BufferedOutputStreamTest.java)を参照してください。
java.io.bufferedOutputStream; Import java.io.file; Import java.OutputStream; Import Java.io.fileOutputStream; Import java.io.ioexception; Import java.io.filenotfoundection;プログラム * * @Author Skywang */public class BufferedOutputStreamTest {private static final int len = 5; //英語の手紙に対応する "abcddefghijklmnopqrssttuvwxyz" 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){testbufferedoutputStream(); } / *** BufferedOutputStreamのAPIテスト関数* / private static void testicbufferedOutputStream(){//「ファイル出力ストリーム」に対応するBufferedOutputStreamを作成します//対応するバッファーサイズは16です。 try {file file = new file( "out.txt"); outputStream out = new BufferedOutputStream(new FileOutputStream(file)、16); //出力ストリームにarrayletters配列の最初の10バイトを書き込みます。 //「newline/n」を出力ストリームout.write( '/n')に書き込みます。 // TODO! // out.flush(); readuserinput(); out.close(); } catch(filenotfoundexception e){e.printstacktrace(); } catch(securityexception e){e.printstacktrace(); } catch(ioexception e){e.printstacktrace(); }} / ***ユーザー入力の読み取り* / private static void readuserinput(){system.out.println( "テキストを入力してください:");スキャナーreader = new scanner(system.in); //入力文字列str = reader.next()を待ちます。 System.out.printf( "入力は:%s/n"、str); }}実行結果:
ファイル「out.txt」を生成すると、ファイルのコンテンツは「abcdefghij」です。
ステップバイステップテスト:次の3つの手順に従って、プログラムをテストして、バッファサイズとフラッシュの役割を表示します()。
タイプ1:オリジナルプログラム
(1)プログラムを実行します。プログラムがユーザー入力を待っているときは、「out.txt」のテキストコンテンツを確認します。検索:コンテンツは空です。
(2)プログラムを実行します。ユーザー入力の後、「out.txt」のテキストコンテンツを確認します。検索:コンテンツは「abcdefghij」です。
このことから、(01)と(02)の結果は異なることがわかります。 (01)のout.txtコンテンツが空である理由は、out.txtに対応するバッファサイズが16バイトであり、11バイトのみを書き込むため、クリアバッファ操作を実行しない(つまり、バッファデータを出力ストリームに書き込みます)。
out.txtに対応するコンテンツは「abcdefghij」です。これは、out.close()が実行され、出力ストリームを閉じるためです。出力ストリームを閉じる前に、バッファデータは出力ストリームに書き込まれます。
注:再テストするときは、最初に削除してください。txt。
タイプ2:readuserinput()の前に次のステートメントを追加します
out.flush();
この文の目的は、「バッファーコンテンツ」を出力ストリームに書き込むことです。
(1)プログラムを実行します。プログラムがユーザー入力を待っているときは、「out.txt」のテキストコンテンツを確認します。検索:コンテンツは「abcdefghij」です。
(2)プログラムを実行します。ユーザー入力の後、「out.txt」のテキストコンテンツを確認します。検索:コンテンツは「abcdefghij」です。
このことから、(01)および(02)と同じ結果が、out.txtの対応する内容が「abcdefghij」であることがわかりました。これは、flush()操作が実行されたためです。これは、バッファデータを出力ストリームに書き込むために使用されます。
注:再テストするときは、最初に削除してください!
タイプ3:最初のタイプに基づく、
out.write(arrayletters、0、10);
に変更された
out.write(arrayletters、0、20);
(1)プログラムを実行します。プログラムがユーザー入力を待っているときは、「out.txt」のテキストコンテンツを確認します。コンテンツが「abcdefghijklmnopqrst」であることを見つけます(Enterを除く)。
(02)プログラムを実行します。ユーザー入力の後、「out.txt」のテキストコンテンツを確認します。コンテンツが「abcdefghijklmnopqrst」(Enterを含む)であることを見つけます。
このことから、(01)実行の結果は「abcdefghijklmnopqrst」(キャリッジリターンを除く)であることがわかりました。これは、バッファーのサイズが16であり、バッファのサイズを超えて20バイトを記述し、write(arrayletters、0、20)を書き込むためです。この時点で、すべての入力はバッファを通過せずに出力ストリームに直接書き込まれます。
(3)操作の結果は、「abcdefghijklmnopqrst」(キャリッジリターンを含む)です。
注:再テストするときは、最初に削除してください!