IOストリーム
Javaでは、IOストリームはバイトストリームと文字ストリームの2つのタイプに分かれています。名前が示すように、バイトストリームはバイトに従って読み取りおよび書き込まれ、文字に応じて文字がアクセスされます。一般的に使用されるファイルの読み取りは文字ストリームであり、バイトストリームはネットワーク通信で使用されます。
次の図は、JavaのIOストリームの全体的なフレームワークです。
バイトストリーム
Javaでは、バイトストリームは一般にストリームで終わります。入力バイトストリームはinputstreamと呼ばれ、出力バイトストリームはoutputStreamと呼ばれます。 inputStreamとoutputStreamは、入力/出力のすべてのクラスを表すスーパークラスであり、抽象クラスです(要約)
一般的に使用されるバイトストリームは次のとおりです。
1.FileInputStream/FileOutputStream2.BufferedInputStream/bufferedOutputStream3333。SequenceInputStream(シーケンスストリーム)4.ObjectInputStream/objectOutputStream(オブジェクト入力と出力ストリーム)5。プリントストリーム(印刷ストリーム)
文字ストリーム
Javaでは、入力文字ストリームは読者で終わり、出力文字ストリームはWriterで終わります。たとえば、私たちの一般的なFilreaderおよびFileWriterは文字ストリームであり、読者とウィッターは入出力/出力文字ストリームのスーパークラスであり、抽象クラスでもあります。
一般的に使用される文字ストリームは次のとおりです。
1.FileReader/fileWriter2.BufferedReader/BufferedWriter3.InputStremReader/OutputStreamWriter(Convert Stream)
流れを変換します
コンバージョンストリームは、バイトストリームを文字ストリームに変換するクラスであり、2つのタイプがあります。
・入力StreamReader outputStreamWriter
inputStreamReaderは、バイトストリームをラッピングする必要がある文字ストリーム(Reader)です。
outputStreamWriterはキャラクターストリーム(ライター)であり、バイトストリームをラップする必要があります(outputStream)
飾る
パッケージングの目的は、元のオブジェクトに基づいて新しい機能を追加することです。たとえば、BufferedReaderは読者をラップします。これは、実際には読者関数の強化です。元の読者は1つの文字と1つの文字によってのみ読み取ることができ、パッケージング後に形成されたバッファレッドリーダーは、直接読み取る機能(ReadLine)です。直感的に言えば、これはいわゆる飾りです。
設計モードに関しては、これは典型的な装飾モードであり、その特性は次のとおりです。
1。装飾オブジェクトと実際のオブジェクトには同じインターフェイスがあります。このようにして、クライアントオブジェクトは、実際のオブジェクトと同じ方法で装飾的なオブジェクトと対話できます。 2。装飾的なオブジェクトは、これらの要求を転送する前または後にいくつかの追加機能を追加できます。これにより、ランタイム中に、指定されたオブジェクトの構造を変更せずに、追加の機能を外部に追加できます。
私たちに対応しているのは、BufferedReaderとReaderが両方とも読者であるということです。パッケージング後、BufferedReader関数は強化されますが、読者として使用できます(OOの親クラス参照はサブクラスを指すことができます)
例
バイトストリームの例
mp3ファイルを複数のコピーに切り取り、それを再結合します
パッケージcn.xdian.test; Import java.io.file; import java.io.fileinputStream; Import java.io.fileoutputStream; Import java.io.ioexception; Import java.io.sequenceinputStream; Import Java.util.enumeration; Import Java.util.vection; IoException {cutfile(); // Cut Mp3ファイルMergeflile(); // Merge Mp3 Files} // Merge mp3public static void mergeflile()throws ioexception {file dir = new file( "/home/gavinzhou/music_test"); vector <fileinputStream>(); file [] files = dir.listfiles(); for(file file:files){if(file.getname()。endswith( "。Mp3")){vector.add(new fileinputStream(file));}} //ベクトルエキンドリー<fileinputStream> e = vector.elements(); // sequence stream sequenceinputtream = create sequenceinputtream = fileinputInputStream(E); fileoutputStream fileoutputStream = new fileoutputStream( "/home/gavinzhou/conbine.mp3"); //分割mp3ファイルバイト[] buf = new byte [1024]; int length = 0; fileoutputStream.close(); inputstream.close();} // mp3public static void cutfile()throws ioexception {file file = new file( "/home/gavinzhou/test.mp3"); file dir = new file( "/home/gavinzhou/music_test"); fileInputStream(file); // file byte [] buf = new byte [1024*1024]; int length = 0; for(int i = 0;(length = fileinputstream.read(buf))!= -1; i ++){fileoutputstream fileoutputstream = new fileoutputstream(new(new) file(dir、 "part"+i+"。MP3"))文字ストリームの例
ファイルaをファイルにコピーb
パッケージcn.xidian.test; import java.io.bufferedreader; import java.io.bufferedwriter; Import java.io.file; Import java.io.filereader; Import java.io.filewriter; Import java.io.io.ioexception; public void main [] String void demo( new file( "/home/gavinzhou/a.txt"); file desfile = new file( "/home/gavinzhou/b.txt"); //入力ストリームbufferedreader入力= new filereader(sourceFile));新しいファイル文字列line = nullへ。 while((line = input.readline())!= null){output.write(line); output.newline();} //入力および出力ストリーム入力を閉じます。印刷ストリームの例
パッケージcn.xidian.test; Import java.io.file; Import java.io.fileoutputStream; Import java.io.ioexception; Import java.io.io.printstream;/*印刷ストリームはあらゆる種類のデータを印刷できます。データを印刷する前に、データは文字列に変換され、その後印刷されます*/class動物{文字列名;文字列名、public Animal(this.name = name; this.color = color;}@override public string tostring(){return "name:"+ this.name+ " IOException {/* file file = new file( "/home/gavinzhou/a.txt"); //印刷ストリームを作成しますprintStream printStream = new PrintStream(file); //情報をファイルに印刷してprintStream.println(97); printStream.println(3.14); printStream.println( 'a'); printStream.println(true);動物a = new Animal( "rat"、 "black"); printStream.println(a); //標準の入力および出力システムを変更します。Setout(printStream); //標準出力は画面System.out.println( "test ...."); *///例外ログ情報のコレクション。 file logfile = new file( "/home/gavinzhou/test.log"); printstream logprintStream = new PrintStream(new fileoutputStrem(logfile、true)); try {int c = 4/0; //例外System.out.println( "c ="+c); e){e.printstacktrace(logprintStream); //画面上ではなくファイルへの出力}}}}}要約します
上記は、JavaのIOストリーム分析とコード例に関するものです。私はそれが誰にでも役立つことを願っています。興味のある友達は引き続きこのサイトを参照できます:
Java Exploration:スレッド+IOファイルの暗号化および復号化コードの例
Java IOストリーム関連の知識コード分析
Java IOストリームの詳細な解釈
欠点がある場合は、それを指摘するためにメッセージを残してください。このサイトへのご支援をありがとうございました!