ストリームは、バイトシーケンスの抽象的な概念です。
ファイルは静的ストレージフォームのデータであり、ストリームはデータが送信されるときにフォームを指します。
ストリームクラスは、ノードストリームクラスとフィルタリングされたストリームクラス(プロセスストリームクラスとも呼ばれます)の2つの主要なカテゴリに分けられます。
ターゲットデバイスに対応するクラスは、ノードフロークラスと呼ばれます。このプログラムは、間接フロークラスを介してノードフロークラスを呼び出して、さまざまな種類のデータをより柔軟で便利な読み取りを実現することもできます。この間接フロークラスは、フィルターフロークラス(処理フロークラスとも呼ばれます)、またはパッケージクラスです。
ラッパークラスの呼び出しプロセスは次のとおりです。
フロー分類間の関係
ストリームの分類がどれほど豊かで複雑であっても、そのルーツは4つの基本クラスから来ています。これらの4つのクラスの関係は次のとおりです。
| バイトストリーム | 文字ストリーム | |
| 入力ストリーム | inputstream | リーダー |
| 出力ストリーム | outputStream | 作家 |
UnicodeはJavaに保存された文字をエンコードし、文字ストリーム処理クラスは、Javaの他の外部コード文字ストリームとUnicode文字ストリームを変換する責任があります。クラスは、文字ストリームとバイトストリームのコンバージョンを処理します。文字ストリーム(一度に1つのバッファーを処理できます)は、バイトストリーム(一度に1つのバイト)よりも1つの操作でより効率的です。
inputstream
inputStreamとoutputStreamはクラスをABSTACTクラスであるため、どのIOデバイスに対応するかを示すことはできません。その下には、ネットワーク、パイプライン、メモリ、ファイルなどの特定のIOデバイスや、実際のプログラムで使用されているさまざまなサブクラスオブジェクトなど、多くのサブクラスがあります。
注:ノードフロークラスに対応するIOソースとターゲットを呼び出しますストリームノード(ノード)。
注:ファイルAのコンテンツをファイルBに書き込む場合、プログラムはファイルAの操作に出力クラスまたは入力クラスを使用します。入力クラスと出力クラスは、ファイルに代わってではなく、プログラムに関連しているため、ファイルAおよび出力クラスを完了するための入力クラスを作成してファイルBで操作を完了する必要があります。
outputStream
キャラクター指向のストリームリーダー/ライター
Unicode文字が監督するストリームは、ストリームから読み取り、またはUnicode文字のストリームに情報を書き込むことを意味します。同様に、リーダー/ライターもクラスを控えています。
リーダー
作家
IOプログラムコードの再利用:
通常、コードを作成するときは、キーボード入力の終了として-1を使用し、書面による関数に直接system.を使用しないでください。機能を呼び出すと、System.inがパラメーターとして渡されます。このようにして、マニュアルキーボード入力を置き換えるために将来ファイルからデータを読みたい場合は、この機能を直接使用できるため、プログラムは変更を加えて変更に適応する効果を達成するために、あまりにも多くの変更を加える必要はありません。
バイトストリームと文字ストリームの変換
inputStreamReaderおよびoutputStreamReader:バイト指向のストリームを文字指向のストリームに変換します。
InputStreamReaderクラスは、バイトストリームから文字ストリームまでのブリッジです。バイトで読み取り、指定されたエンコードメソッドに従って文字ストリームに変換します。
使用されるエンコーディング方法は、名前、またはプラットフォームに許容できるデフォルトのエンコードメソッドで指定できます。
inputStreamReaderのread()メソッドのいずれかの1つへの各呼び出しにより、1つ以上のバイトがベースバイト入力ストリームから読み取られる場合があります。
より高い効率を達成するために、BufferedReaderを使用してInputStreamReaderをカプセル化することを検討してください。
BufferedReader in = new BufferedReader(new inputStreamReader(System.in));
Javaストリーミング使用の概要
私は私の最もプロフェッショナルな仕事で多くのJavaストリームに遭遇しました、そして、要約は次のとおりです。
1。zip形式を生成します。遭遇するのは、サーブレットにzipファイルを生成し、それらをWebクライアントに出力し、直接ダウンロードすることです。
Response.setContentType( "Application/zip"); Response.Addheader( "Content-Disposition"、 "Attachment; filename =/" xxx.zip/ ""); zipoutputStream out = new zipoutputStream(response.getOutputStream())for(){zipentry entry = new Zipentry( "aa" + i ".dat"); out.putnewentry(entry);バイト[] bt = s.getBytes(); out.writebytes(bt、0、bt.length()); out.closeentry(); } out.flush(); out.close(); zipoutputStreamはjava.io.filteroutputStreamから継承します。したがって、実際の書き込み操作は、パラメーター出力ストリームを介して記述されます。
そのvoid write(byte [] b、int off、int len)は最終的に呼び出します。
zipファイルを生成する場合は、new zipoutputStream(new fileoutputStream(PATH))を書き込みます。
2。同様のライティングXML。
xmlwriter writer = new xmlwriter(new fileoutputStream(PATH)、FORMATTER)
writer.write(doc)。原則は上記に似ています
3.テキストファイルを書き、それらを追加します。
printStream ps = new PrintStream(new fileoutputStream(path、true)、 "utf-8")ps.println(s); // boolean、intなどのさまざまなタイプを書くことができます。PrintSteamは、FilterOutputStreamからも継承します
dataoutputStream out = new DataOutputStream(socket.getOutputStream()); out.writebytes(bt); out.writeboolean(boolean v);
DataOutputStreamもFilterOutputStreamです。
5。テキストから読む
BufferedReader Reader = new BufferedReader(new FileReader(PATH)); reader.readline();
BufferedReaderパターンは、上記のフィルターパターンと同じです。読者オブジェクトがパラメーターとして渡され、実際に読み取られるために使用されるオブジェクトを保存します。
BufferedReaderのJava 1.0に対応するクラスは、BufferedInputStreamであり、これはFilterInputStreamです。
6。ソケットから読んでください
BufferedInputStream is = new BufferedInputStream(socket.getInputStream()); is.read(bt、0、bt.length());
要約:
基本クラスのストリームシリーズは、入力ストリームとoutputStreamです。それらは抽象クラスであり、必要な唯一の方法は(例として出力を取る)です
void write(int b)はioexceptionをスローします。 void write(byte b [])はioexceptionvoid write(byte b []、int off、int len)をスローします
最も基本的なことは、バイト操作です。最初の方法は整数を書くようですが、実際には1つのバイト(最低8ビット)のみを書き込みます。そのサブクラスは2つのシリーズに分割され、1つは出力デバイスを直接操作することです。上で遭遇したのは、ファイル(FileOutputStream)とサーブレット出力(ServletOutputStream)です。他の一般的に使用されるものも、メモリで直接動作するbytearrayoutputStreamです。
次は、outputStreamオブジェクトシートパラメーターを受信するFilterOutputStreamシリーズで、実際の書き込み操作がオブジェクトを介して完了します。たとえば、ZipoutputStreamは、圧縮データの生成のみを担当します。このデータがファイル、メモリ、またはサーブレスポンスに書き込まれるかどうかについては、入力パラメーターによって決定されます。これがデコレーターパターンです。
フィルターシリーズで一般的に使用される操作には、printStream(print、println、write(boolean [int、char、string])を提供し、最後にout.writeメソッドを使用してバイトで書き込みます。
DataUtputStreamもあります。これは、writebyte/writeboolean/writedouble/writelong/wiretutfおよびその他の方法を提供します。
ソケット/zipなども一般的に使用されていないものがあります。
Javaストリーミングは非常に便利で複雑です。複雑さとは、関数を実装するには多くの場合、複数のクラスが必要であり、複数の組み合わせがあることを意味します。それはまだ実際に要約する必要があります。