1.OutputStreamクラス
私たちはつい最近、入力ストリームを調査しました。出力ストリームについて話しましょう。
このOutputStreamクラスは、バイト出力をサポートするすべてのクラスの親クラスです。これはそれ自体では何もしない抽象クラスですが、あらゆる場面に対応する子孫クラスを持っています。
非常に複雑に聞こえます。より簡単に言うと、このクラスは文字やその他のデータ型ではなく、バイトを操作します。そして、それが抽象であるという事実は、通常はそれを使用せず、その子孫クラスの 1 つを使用することを意味します。例えば、FileOutputStreamなど。
しかし、クラスに戻りますOutputStream。このクラスには、そのすべての子孫クラスが実装する必要があるメソッドがあります。主なものは次のとおりです。
| メソッド | 説明 |
|---|---|
|
intストリームに1 バイト (バイトではなく) を書き込みます。 |
|
バイト配列をストリームに書き込みます |
|
バイト配列の一部をストリームに書き込みます |
|
バッファに格納されているすべてのデータをストリームに書き込みます |
|
ストリームを閉じます |
を継承するクラスのオブジェクトを作成するときは、通常、 がデータを読み取るInputStreamソース オブジェクトを指定します。InputStreamを継承するクラスのオブジェクトを作成するときはOutputStream、通常、データが書き込まれるターゲット オブジェクトまたはストリームも指定します。
クラスのすべてのメソッドを簡単に見てみましょうOutputStream。
write(int b)方法
このメソッドは、int出力ストリームに 1 バイト (バイトではなく) を書き込みます。渡された値はバイトにキャストされ、int の最初の 3 バイトは破棄されます。
write(byte[] buffer)方法
指定されたバイト配列を出力ストリームに書き込みます。それでおしまい。
write(byte[] buffer, int offset, int length)方法
渡されたバイト配列の一部を出力ストリームに書き込みます。オフセット変数は配列の最初の要素のインデックスを示し、length書き込まれるサブセットの長さになります。
flush()方法
このflush()メソッドは、現在のストリームにバッファリングされている可能性のあるデータを強制的にターゲット ストリームに書き込むために使用されます。これは、バッファリングやチェーンに配置された複数のストリーム オブジェクトを使用する場合に関係します。
close()方法
未書き込みのデータをターゲット オブジェクトに書き込みます。ブロックを使用する場合、メソッドclose()を呼び出す必要はありませんtry-with-resources。
ファイルのコピー例
| コード | ノート |
|---|---|
|
InputStreamファイルからの読み取り用 ファイルOutputStreamへの書き込み用 データを読み取るバッファー ストリームにデータがある限り データをバッファーに読み取る データをバッファーから 2 番目のストリームに書き込む |
2.Writerクラス
このWriterクラスは クラスとまったく同じですOutputStreamが、もう一度違う点が 1 つだけあります。それは、charバイトではなく文字 ( ) を処理することです。
これは抽象クラスです。このWriterクラスのオブジェクトを作成することはできません。その主な目標は、何百もの子孫クラスの共通の親クラスとなり、文字ストリームを操作するための共通のメソッドをそれらのクラスに提供することです。
Writerクラス (およびそのすべての子孫クラス)のメソッド:
| メソッド | 説明 |
|---|---|
|
intストリームに1 文字 ( ではない) を書き込みます。 |
|
文字の配列をストリームに書き込みます |
|
文字の配列の一部をストリームに書き込みます |
|
ストリームに文字列を書き込みます |
|
文字列の一部をストリームに書き込みます |
|
バッファに格納されているすべてのデータをストリームに書き込みます |
|
ストリームを閉じます |
これらのメソッドはクラスのメソッドとよく似ていますOutputStreamが、バイトではなく文字を処理します。
メソッドの説明:
write(int b)方法
このメソッドは、単一の文字 ( char— ではなくint) を出力ストリームに書き込みます。渡された値は a にキャストされchar、最初の 2 バイトは破棄されます。
write(char[] buffer)方法
指定された文字の配列を出力ストリームに書き込みます。
write(char[] buffer, int offset, int length)方法
渡された文字配列の一部を出力ストリームに書き込みます。変数offsetは配列の最初の要素のインデックスを示し、length書き込まれるサブセットの長さになります。
write(String str)方法
指定された文字列を出力ストリームに書き込みます。
write(String str, int offset, int length)方法
指定された文字列の一部を出力ストリームに書き込みます。文字列は文字の配列に変換されます。変数offsetは配列の最初の要素のインデックスを示し、length書き込まれるサブセットの長さになります。
flush()方法
このflush()メソッドは、現在のストリームにバッファリングされている可能性のあるデータを強制的にターゲット ストリームに書き込むために使用されます。これは、バッファリングやチェーンに配置された複数のストリーム オブジェクトを使用する場合に関係します。
close()方法
未書き込みのデータをターゲット オブジェクトに書き込みます。ブロックを使用する場合、メソッドclose()を呼び出す必要はありませんtry-with-resources。
テキスト ファイルをコピーするプログラムの例:
| コード | ノート |
|---|---|
|
ReaderファイルからのWriter読み取り用 ファイルへの書き込み用データを読み取るバッファー ストリーム内にデータがある限り データをバッファーに読み取る データをバッファーから 2 番目のストリームに書き込む |
StringWriterクラス
このクラスを継承する別の興味深いクラスがありますWriter。それは と呼ばれますStringWriter。これには、変更可能な文字列、つまりStringBufferオブジェクトが含まれています。そして、オブジェクトに何かを「書き込む」たびにStringWriter、テキストが内部バッファに追加されるだけです。
例:
| コード | ノート |
|---|---|
|
ターゲットの文字ストリーム ( StringWriter) が作成されます。文字列が内部のバッファに書き込まれます。 StringWriter文字列が内部のバッファに書き込まれます。 StringWriterオブジェクトの内容を文字列に変換します。 |
この場合、StringWriterクラスは本質的にクラスのラッパーですStringBufferが、StringWriterクラスはストリーム クラスの子孫でありWriter、ストリーム オブジェクトのチェーンで使用できます。これは実際には非常に便利なプロパティです。
GO TO FULL VERSION