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
、ストリーム オブジェクトのチェーンで使用できます。これは実際には非常に便利なプロパティです。
3.PrintStream
クラス
出力ストリーム クラスは、渡されたターゲット ストリームにデータを書き込む中間ストリームとのチェーンに配置することもできます。これらのストリームの相互作用の全体像は次のようになります。
すべての中間出力ストリームの中で最も興味深く多用途なストリームは ですPrintStream
。数十のメソッドと 12 ものコンストラクターがあります。
クラスPrintStream
は を継承しFilterOutputStream
、そのクラスは を継承しますOutputStream
。これは、クラスが独自のメソッドに加えて、親クラスのすべてのメソッドをPrintStream
持っていることを意味します。最も興味深いものは次のとおりです。
メソッド | 説明 |
---|---|
|
渡されたオブジェクトを文字列に変換し、ターゲット ストリームに出力します。 |
|
渡されたオブジェクトを文字列に変換し、ターゲット ストリームに出力します。最後に改行を追加します |
|
対象ストリームに改行文字を出力します。 |
|
フォーマット文字列と渡された引数に基づいて文字列を構築して出力します。String.format() 方法に似ています |
では、これらの数十のメソッドはどこにあるのでしょうか?
print()
そうですね、さまざまなパラメーターを備えたおよびメソッドのバリアントが多数ありますprintln()
。それらは次の表にまとめられます。
これらの方法についてはすでによく知っているので、ここでは詳しく説明しません。私が何を言いたいのかわかりますか?
覚えていますSystem.out.println()
か?ただし、次の 2 行で書くことができます。
コード | コンソール出力 |
---|---|
|
|
私たちのお気に入りのコマンドは、クラスの静的変数のメソッドの呼び出しです。そして、この変数の型は です。System.out.println()
println()
out
System
PrintStream
PrintStream
CodeGym の多くのレベル、およびほぼすべてのタスクで、あなたは知らないうちにクラスのメソッドを呼び出しています。
実用
Java には、 という興味深いクラスがありますByteArrayOutputStream
。これは、 を継承し、動的に増加するバイト配列ですOutputStream
。
オブジェクトByteArrayOutputStream
とPrintStream
オブジェクトは次のようにチェーンできます。
コード | 説明 |
---|---|
|
メモリ内に書き込みバッファを作成します。 バッファを PrintStream オブジェクトにラップします。 データをコンソールに書き込みます 。 配列を文字列に変換します。 コンソール出力:
|
GO TO FULL VERSION