JAva入力ストリームと出力ストリームの概要
3096 ワード
Java.ioパッケージでは、java.io.InputStreamはバイト入力ストリームを表し、java.io.OutputStreamはバイト出力ストリームを表します.これらは抽象クラスであり、インスタンス化できません.InputStreamクラスは、データの読み取りに関する一連の方法を提供します. (1)int read():入力ストリームからデータを読み出し,次の3つのリロード形式がある. int read():入力ストリームから8ビットのバイトを読み出し、0~255の整数に変換し、この整数を返します.例えば、9が読み出された場合は9を返し、読み出されたバイトが-9の場合は247を返す.入力ストリームの最後に遭遇すると-1を返す. int read(byte[]b):入力ストリームから複数のバイトを読み出し、パラメータbで指定したバイト配列に保存します.返される整数は、読み込まれたバイト数を表します.入力ストリームの最後に遭遇すると、-1が戻る. int read(byte[]b,int off,int len):入力ストリームから数バイトを読み出し、パラメータbが指定した直接配列に保存します.パラメータoffは、バイト配列内でデータの保存を開始する先頭の下付き文字を指定し、パラメータlenは読み出したバイト数を指定します.返される整数は、実際に読み込まれたバイト数を表します.入力ストリームの最後に遭遇した場合は、-1を返します. 以上の最初のreadメソッドは、入力ストリームから1バイトを読み出し、残りの2つのreadメソッドは、入力ストリームから複数バイトを一括して読み出す.ファイルまたはキーボードからデータを読み取る場合、後ろの2つのreadを使用すると、物理的にファイルまたはキーボードを読む回数が減少するため、I/O操作の効率が向上します. (2)void close():入力ストリームを閉じます.すべての読み取り操作が完了したら、入力フローを閉じる必要があります.InputStreamクラス自体のclose()メソッドは、何も実行しません.そのいくつかのサブクラスはclose()メソッドをカバーし、close()メソッドでストリームに関連するシステムリソースを解放します. (3)int available():入力ストリームから読み出すことができるバイト数を返す. (4)skip(long n):入力ストリームからパラメータnが指定した直接数をスキップする. (5)boolean markSupported(),void mark(int readLimit),void reset():ストリームからデータを繰り返し読み込む場合は、以下のように実現できます.まずmarkSupported()メソッドでこのストリームが重複読み出しデータをサポートしているかどうかを判断し、trueを返すとストリームにタグを設定できることを示します.次にmark(int readLimit)メソッドを呼び出してストリームの現在位置からタグを設定し、readLimitパラメータはストリームにタグを付けたバイト数を指定します.その後、read()メソッドでタグ範囲内のバイトを読み出す.最後にreset()メソッドを呼び出し、入力ストリームをさっきマークした開始位置に再配置します.これでタグ付けされたデータを繰り返し読み取ることができます. JAva.io.Streamクラスは、データの書き込みに関する一連の方法を提供します. (1)void write(int b):出力ストリーム書き込みデータのように、次の3つのリロード形式がある. void write(b):出力ストリームに1バイト書き込みます. void write(byte[]b):パラメータbが指定したバイト配列のすべてのバイトを出力ストリームに書き込む. void write(byte[]int off,int len):パラメータbで指定されたバイト配列のいくつかのバイトを出力ストリームに書き込み、パラメータoffは直接配列の先頭下付きを指定し、この位置からパラメータlenで指定された数のバイトを出力する. 以上の最初のwriteメソッドは出力ストリームに1バイトを書き込み、残りの2つのWriteメソッドは出力ストリームに複数バイトを一括して書き込む.ファイルまたはコンソールにデータを書き込む場合、次の2つのwriteメソッドを使用すると、物理的なファイルまたはコンソールを書く回数を減らすことができ、I/O操作の効率を向上させることができます. (2) void close();:入力フローを閉じます.すべての書き込みが完了したら、入力フローを閉じる必要があります.OutputStreamクラス自体のclose()メソッドは何も実行しません.そのいくつかのサブクラスはclose()メソッドをカバーし、ストリームに関連するシステムリソースを解放します. (3)void flush():OutputStreamクラス自体のflush()メソッドは、バッファ付きサブクラス(BufferOutStreamおよびPrintStreamクラスなど)がflush()メソッドを上書きするアクションを実行しません.バッファ付き出力ストリームでデータを書き込む場合、データ線はバッファに保存され、一定のプログラムに蓄積されて出力ストリームに書き込まれます.バッファは通常バイト配列で実現され、実際にはメモリ領域を指す.flush()メソッドは,バッファのデータを出力ストリームに強制的に書き込む. プログラムの出力ストリームへのデータの書き込みは、北京から上海にダックを運ぶことにたとえられる.バッファがなければwrite(int b)法は一度も実行されず、北京から上海に1匹のダックを運ぶだけで、1万匹のダックがあれば1万回運ばなければならないという輸送効率は明らかに低い.輸送回数を減らすために、まずダックをトラックの車両に積み込むことで、ダックを一括して輸送することができ、トラックの車両は緩衝区である.デフォルトでは、車両にダックがいっぱいになってから、このダックを上海に運ぶことができますが、flush()方法は、車両がいっぱいになっているかどうかにかかわらず、すぐに貨物輸送操作を実行することを示しています. 入力ストリームまたは出力ストリームがタイムリーに閉じることを保証するためには、ストリームを閉じる操作をfinallyコードブロックに置くことが望ましい.I/O操作には、通常、次の手順が使用されます.
InputStream in;
OutputStream out;
try{
//
//
}catch(IOException e){
// IO
}finally{
in.close();
out.close();
}