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