この記事では、主に Java プログラミングの IO ストリーム情報の関連情報を詳しく紹介します。必要な友人は参照してください。
Java IO の詳細な説明:
Java ストリームの操作に関連するクラスまたはインターフェイス:
Java Stream クラス図の構造:
ストリームの概念と役割
ストリームとは、開始点と終了点を持つ連続したバイトの集合であり、データ送信の一般用語または要約です。つまり、2 つのデバイス間のデータ伝送はストリームと呼ばれます。ストリームの本質はデータ伝送であり、データ伝送の特性に応じて、より直感的なデータ操作を容易にするためにさまざまなカテゴリに抽象化されます。
IOストリームの分類
キャラクターストリームとバイトストリーム
キャラクターストリームの起源: データエンコーディングの違いにより、文字に対して効率的な操作を実行するストリームオブジェクトが存在します。実際の本質は、バイトストリームに基づいて読み取るときに、指定されたコードテーブルをチェックすることです。 バイトストリームと文字ストリームの違い:Java IO ストリーム オブジェクト
1. 入力バイト ストリームInputStreamIO の入力バイト ストリームの継承図は、次のことがわかります。入力バイトストリームは抽象クラスです。写真の青い部分が主な対応部分、赤い部分が非対応部分です。
紫色の点線は、これらのストリームが通常一緒に使用されることを示します。上の図からわかるように、Java IO のバイト ストリームは非常に対称的です。 「存在と合理性」 これらのバイト ストリーム内の非対称クラスのいくつかを見てみましょう。
1.LineNumberInputStream は主にストリームからのデータの読み込みを完了し、対応する行番号を取得します。いつどこで分岐するかはクラス変更によって能動的に決定され、元にはそのような行番号はありません。出力部分には対応する部分はありません。LineNumberOutputStream を自分で作成できます。最初に書き込まれるときは、改行が発生するたびに行番号が次の行に追加されます。大丈夫のようです。さらに不人気のようです。2. PushbackInputStream の機能は、最後のバイトをチェックし、満たされていない場合はバッファーに入れることです。主にコンパイラの構文および字句解析部分で使用されます。出力部分の BufferedOutputStream もほぼ同様の機能を実装しています。
3.StringBufferInputStream は非推奨になっており、InputStream 部分に表示すべきではありません。これは、主に String が文字ストリームのスコープに属している必要があるためです。放棄されていますが、出力部分にはもちろん必要ありません。バージョンの下位互換性を維持するためだけに存在することも許可されています。4.SequenceInputStreamは、2つ以上の入力ストリームを1つの入力ストリームとして順番に読み込むツールクラスと考えることができます。これは IO パッケージから完全に削除でき、IO パッケージの構造にはまったく影響しませんが、より「純粋な」、つまり純粋な Decorator モードになります。
5.PrintStream は補助ツールとして考えることもできます。主に他の出力ストリームまたは FileInputStream にデータを書き込むことができ、その内部実装は依然としてバッファリングされています。本質的に、これは他のストリームを包括的に適用するためのツールにすぎません。 IO パッケージをキックアウトすることもできます。 System.out と System.out は PrintStream のインスタンスです。
4. 文字入力ストリーム Reader
上の継承図からわかるように:
1.Reader はすべての入力文字ストリームの親クラスであり、抽象クラスです。
2.CharReader と StringReader は、それぞれ Char 配列と String からデータを読み取ります。 PipedReader は、他のスレッドと共有されているパイプからデータを読み取ります。
3.BufferedReader は明らかにデコレータであり、それとそのサブクラスは他の Reader オブジェクトを装飾する役割を果たします。
4.FilterReader は、すべてのカスタム固有の装飾ストリームの親クラスであり、そのサブクラス PushbackReader は Reader オブジェクトを装飾し、行番号を追加します。
5.InputStreamReaderは、バイトストリームと文字ストリームを接続するブリッジです。バイトストリームを文字ストリームに変換します。 FileReader はこの機能を実現するためによく使われるツールクラスと言えますが、そのソースコードでは明らかに FileInputStream を Reader に変換するメソッドが使用されています。このクラスから特定のトリックを得ることができます。 Readerの各クラスの目的や使用方法は基本的にInputStreamと同様です。 ReaderとInputStreamの間には後ほど対応関係が生まれます。 5. 文字出力ストリーム Writer
上記の関係図からわかるように:
1.Writer はすべての出力文字ストリームの親クラスであり、抽象クラスです。
2.CharArrayWriter と StringWriter は、それぞれ Char 配列と String にデータを書き込みます。 PipedWriter は、他のスレッドと共有されるパイプにデータを書き込みます。
3. BufferedWriter は、Writer にバッファリング機能を提供するデコレーターです。
4.PrintWriter と PrintStream は非常に似ており、機能と用途も非常に似ています。
5. OutputStreamWriter は、OutputStream から Writer への変換のブリッジです。そのサブクラス FileWriter は、実際にはこの関数を実装する特定のクラスです (詳細については、SourceCode を参照してください)。機能と使用法は OutputStream と非常に似ており、対応する図は後で示します。 6. 文字ストリームの入出力の対応
7. 文字ストリームとバイトストリームの変換
変換ストリームの特徴:
文字ストリームとバイトストリームの橋渡しです
読み取ったバイトデータを、指定したエンコーディングで文字に変換できます
読み取った文字データを、指定したエンコーディングでバイトに変換できます
変換ストリームはいつ使用しますか?
バイトと文字の間の変換アクションがある場合;
ストリーム操作のデータをエンコードまたはデコードする必要がある場合。
特定のオブジェクトの実施形態:
InputStreamReader:バイトから文字へのブリッジ
OutputStreamWriter:文字からバイトへのブリッジ
これらの 2 つのストリーム オブジェクトは文字システム メンバー内にあり、変換がある関数であり、それら自体が文字ストリームであるため、構築中にバイト ストリーム オブジェクトを渡す必要があります。
8.Fileクラス
Fileクラスは、ファイルシステム内のファイルとフォルダーをカプセル化するオブジェクトであり、オブジェクトの概念を通じてファイルとフォルダーを操作できます。 File クラスは、ファイル名、ファイル長、最終変更時刻、読み取り可能かどうか、現在のファイルのパス名の取得、指定されたファイルが存在するかどうかの判断、ファイル リスト内のファイル リストの取得など、ファイルまたはディレクトリのさまざまなメタデータ情報を保存します。現在のディレクトリ、ファイルやディレクトリの作成、削除など。
9.RandomAccessFile クラス
このオブジェクトは、バイト ストリームをカプセル化し、内部ポインタを使用して文字配列内の文字を操作するバッファ (文字配列) もカプセル化します。データ。 このオブジェクトの特徴:
このオブジェクトはファイルのみを操作できるため、コンストラクターは次の 2 種類のパラメーターを受け取ります。このオブジェクトは、ファイルの読み取りと書き込みの両方ができます。オブジェクトをインスタンス化するときに、操作モード (r、rw) を指定できます
注: このオブジェクトをインスタンス化するとき、操作対象のファイルが存在しない場合は、ファイルが存在します。ファイルが存在し、データを書き込む場所が指定されていない場合は、最初から書き込まれます。つまり、元のコンテンツが上書きされます。 マルチスレッドのダウンロードや、複数のスレッドによるファイルへのデータの同時書き込みに使用できます。
読んでいただきありがとうございます。お役に立てれば幸いです。このサイトをサポートしていただきありがとうございます。
Java プログラミングの IO フロー情報に関連するその他の記事については、PHP 中国語 Web サイトに注目してください。