Java言語の入力および出力関数は非常に強力で柔軟であり、データの入力操作と出力操作は「ストリーム」方法で実行されます。 J2SDKは、パッケージjava.ioで定義されているさまざまな種類のデータを取得するために、さまざまな「ストリーム」クラスを提供します。データは、標準的な方法を介してプログラムの入力または出力です。
Javaのストリームは、さまざまな観点から分類できます。
ストリームの方向に応じて、入力ストリームと出力ストリームに分割されます。
さまざまなデータユニットによると、バイトストリーム(8ビット)と文字ストリーム(16ビット)に分割されます。
さまざまな機能によると、ノードフローと処理フローに分割されます。
ノードフロー:特定のデータソース(ノード)からデータを読み取りおよび書き込むことができるフロー(ファイル、メモリなど)です。それは蛇口に接続され、水を放出し始めた単一のチューブのようなものです。
処理フロー:既存のストリーム(ノードフローまたは処理フロー)で「接続」されているため、データを処理してより強力な読み取りおよび書き込み関数をプログラムに提供します。パイプ(ノードフロー)が接続されていることに基づいて、いくつかの厚くて特別なパイプ(処理フロー)が流出水のさらなる処理に置かれます。
パッケージにあるJ2SDKが提供するすべてのストリームタイプjava.ioは、次の4つの抽象ストリームタイプを継承します。
4つの基本的なストリームは、入力ストリーム、outputStream、リーダー、およびライターには、より具体的なサブクラスがあり、ファイルストリーム、バッファーストリーム、データストリーム、変換ストリーム、印刷ストリーム、オブジェクトストリームなどに分割されています。その中でも、暗い色はノードフローを表し、明るい色は処理フローを表します。
ここでは、ノードフローと処理フローを通るフローの特定の使用を要約します。
ノードフローの分類:
ノードストリームプロセスファイル(ファイル)、配列(メモリ内の配列)、文字列(文字列)、およびパイプ(パイプ)。
処理フローの分類:
一般的に使用される処理ストリームには、バッファーストリーム、変換ストリーム、データストリーム、オブジェクトストリーム、および印刷ストリームが含まれます。
バッファリングストリーム:対応するバイトストリームにソケットにする必要があり、読み取りおよび書き込みデータのバッファリング機能を提供し、読み取り効率を向上させ、より便利な方法を追加します。
バッファーフローの機能はバケツのようなものです。元のバイトフローは水道管です。水道管は目的地に直接接続されています。バッファーの流れを加えた後、バケツが水道管の下に接続され、バケツが水で満たされた後、目的地に注がれます。バッファリングの役割を果たします。これにより、ハードディスクへの頻繁な読み取りと書き込みを避けて、より多くのデータを一度に読むことができます。バッファリング機能があるため、データを書くときはフラッシュメソッドを使用する必要があります。
java.io.*をインポートします。 public class TestBufferStream{ public static void main(String[] args){ try{ BufferedWriter bw=new BufferedWriter(new FileWriter("F://Java//IO/dat.txt"));//Buffered stream on the byte stream on the written file BufferedReader br=new BufferedReader(new fileReader( "f://java//io/dat.txt")); //読み取りファイルのバイトストリーム上のバッファーストリームs = null; for(int i = 1; i <= 100; i ++){s = string.valueof(math.random()); // sにsをbw.write(s); // dat.txtファイルbw.newline()にsを書き込みます。 //ラインブレーク文字を書きます。バッファーストリームを使用するより良い方法は、データの行を書き込んだり読み取ったりすることです。 } bw.flush(); //メモリ内のすべてのデータをすぐに書き出し、バッファリングされなくなります。 while((s = br.readline())!= null){// line system.out.println(s)によってファイルコンテンツを読み取ります。 } bw.close(); //処理フローを閉じて、内部のノードフローを閉じます。 br.close(); } catch(ioexception e){e.printstacktrace(); }}} Flowの変換:バイトデータとの変換を文字データに使用します。 InputStreamReaderにはinputStreamソケットが必要であり、outputStreamWriterにはoutputStreamソケットが必要です。
データフロー: DatainputStreamとDataOutputStreamは、基本的なデータ型をファイルに書き込みまたは読み取ります。このストリームは非常に役立ちます。そのようなストリームがない場合、8バイトしか占有しない長さがあります。ファイルに書き込みたい場合は、文字列に変換してから、文字列アレイに変換する必要があります。スペースは大量に取ります。ただし、このストリームでは非常に便利です。これらの8バイトをファイルに書き込むだけで、メモリスペースを保存するだけでなく、プログラムをより便利でシンプルにします。ただし、読むときは注意を払う必要があります。読んだデータの種類によると、ポインターは下向きに移動するため、読み取る順序は、正しいニーズを達成するために書く順序と一致する必要があります。それ以外の場合は、データの分割と同等です。
java.io.*をインポートします。 public class testDataStream {public static void main(string [] args){bytearrayoutputStream baos = new bytearrayoutputStream(); //ノードフローを作成します。 dataoutputStream dos = new DataOutputStream(BAOS); //ノードストリームでデータストリーム「パイプ」を接続してください{dos.writedouble(math.random()); //ダブルタイプ、8バイトdos.writeboolean(true); // booleanタイプ、1つのbytebytearrayinputStream bais = new bytearrayinputStream(baos.tobytearray())を占有します。 system.out.println(bais.abailable()); //出力ストリーム内の利用可能なバイトの総数 - 9 DatainputStream dis = new DatainputStream(BAIS); //また、出力ストリームSystem.out.println(dis.ReadDouble())の外側のデータストリーム「パイプ」を接続します。 //ターンリーダブルタイプ番号System.out.println(dis.ReadBoolean()) // booleanタイプのdos.close()をターンする開示する(); } catch(ioexception e){e.printstacktrace(); }}}
印刷ストリーム: java.ioは、印刷用のストリームを提供します。このタイプのストリームには、書くときに自動的にフラッシングする機能があるため、何かを印刷するたびにフラッシュする必要はありません。
java.io.*をインポートします。 public class testprintStream1 {public static void main(string [] args){printstream ps = null; try {fileoutputStream fos = new fileoutputStream( "f://java//io/log.dat"); //出力ストリームを作成し、出力場所ps = new PrintStream(fos); //ストリームの外側の印刷ストリームをパッケージ} catch(ioexception e){e.printstacktrace(); } if(ps!= null){system.setout(ps); //システムの印刷を設定して、PS} int ln = 0; for(char c = 0; c <= 60000; c ++){system.out.print(c+""); // DOSウィンドウに印刷していない場合、出力ストリームは指定されたファイルに直接印刷されます(ln ++> = 100){system.out.println(); ln = 0; }}}}