どんな流れですか?
ストリームは抽象的な概念であり、入力および出力デバイスの抽象化であり、入力ストリームは入力チャネルとみなすことができ、出力ストリームは出力チャネルとみなすことができます。入力ストリームはプログラムに相対的であり、プログラムへの外部データは入力ストリームを使用する必要があります。出力ストリームは、プログラムに相対的であり、外部へのデータを転送するプログラムは、出力ストリームを使用する必要があります。
バイトストリームとは何ですか?
バイトストリーム-伝送中に転送されるデータの最も基本的な単位は、バイトのストリームです。
キャラクタ・ストリームとは何ですか?
キャラクタ・ストリーム - 送信中に転送されるデータの最も基本的な単位である文字のストリーム。
つまみの流れ
バイトストリーム用のクラスは、通常 stream で終わります。
一般的に使用されるバイト入力ストリームは次のとおりです: InputStream FileInputStream BufferedInputStream
使用法:TXTからテキスト情報をプリントアウトします:
コード
public class FileInputStreamDemo {
	public static void main(String[] args) {
		 InputStream is =null; 
		 try {
			 is = new FileInputStream(new File("E:/java /a.txt")); //このフォルダをメモリーに持つ必要がある
			 byte[] chars = new byte; //InputStreamDemoではbyteを使用する。
				int lenth = 0;	 
				while((lenth = is.read(chars))!=-1){ // .txt文字に読み込む
				String str = new String(chars,0,lenth); //バイト配列を文字列に変換するループ
				System.out.println(str);
				}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			try {
				is.close(); // 
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}
走行結果
一般的に使用されるバイト出力ストリームは次のとおりです: OutputStream FileOutputStream BufferedOutputStream
使用法:文字列を TXT にプリントします:
public class Demo {
	//hello world. "というフレーズをテキストファイルに書く。
	public static void main(String[] args){
		OutputStream os = null;
		try {
			//1.ストリームオブジェクトを作成する
			File file = new File("E:/java /a.txt"); //このファイルが存在しない場合、自動的に作成される
			os = new FileOutputStream(file,true); //OutputStreamは抽象クラスであり、FileOutputStreamはサブクラスであり、パラメータはFile型である。
			String str = "hello world.";
			//2.書き込み操作のためにストリーム・オブジェクトのメソッドを呼び出す
			byte[] bytes = str.getBytes(); //文字列をバイト配列に変更する
			os.write(bytes); //バイトを.txtのバイト配列である。
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally{			
			try {
				//3. 
				os.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}
走行結果
文字の流れ
一般的な文字入力ストリームは以下のとおりです:
Reader InputStreamReader FileReader BufferedReader
ご利用ください:
public class FileReaderDemo {
	public static void main(String[] args) {
		Reader r1 = null;
		try {
			r1 = new FileReader(new File("E:/java /a.txt"));
			char[] chars = new char; //文字の配列を定義する。文字は通常1024の倍数である。
			int length = 0;
			//ファイルの中身が大きいことは知られていないので、1024の出力を読むループを使えば、すべての
			while((length = r1.read(chars))!=-1){ // Length = r1.read(chars): r1の内容をcharsバイト配列に読み込む、戻り値はintである、ここでパラメータはchars型である、内容が-1に等しくないことは空でないことを示す
			String str = new String(chars,0,length); //文字配列の内容を文字列に変換する
			System.out.println(length+"--------"+str);
			}
		} catch (FileNotFoundException e) { //ファイルを読み込むための前提条件は、そのファイルが存在することで、そうでない場合は例外がスローされる
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			try {
				r1.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}
走行結果
文字出力ストリーム
一般的な文字出力ストリームは以下の通りです:
ライタ OutputStreamWriter ファイルライタ BufferedWriter
使用法: ファイルに文字列を追加
public class FileWriteDemo {
	public static void main(String[] args) {
		Writer fw = null;
		try {
			//true表面文書にあるものは上書きされず、その後ろに書かれる
			fw = new FileWriter(new File("E:/java /a.txt"),true); 
			fw.write("tanakasan lisi");
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			try {
				fw.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}
走行結果
キャラクタ・キャッシュ・ストリーム
読み取り時間のFileReaderとFileWriterは、1回の読み取りまたは要求ディスクに1回書き込むので、時間の使用は非常に長く、効率が悪いので、読み取りと書き込みキャッシュとしてBufferedReaderとBufferedWriterの導入です。
1、BufferedReaderは一度に8K文字ストリームをメモリに読み込み、プログラムが文字を読み込むと、最初にBufferedReaderに読み込まれます。
2、書き込みバッファとしてBufferedWriterは、ファイルの文字ストリームをBufferedWriterに書き込むには、リフレッシュまたはディスクに書き込む前に、BufferedWriterを閉じて、ディスクの回数を減らす効率を向上させるために書き込まれます。
文字キャッシュ入力ストリーム:TXTからのデータをプログラムに追加します:
public class BufferedReaderDemo {
	public static void main(String[] args) {
		BufferedReader br = null;
		try {
			br = new BufferedReader(new FileReader(new File("E:/java /a.txt")));
			String str = null;
			while((str = br.readLine()) != null){ //readLine()一行ずつ読む
				System.out.println(str);
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			try {
				br.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}
文字キャッシュ出力ストリーム:文字列をTXTに出力します:
public static void main(String[] args) {
		BufferedWriter bw = null;
		try {
			bw = new BufferedWriter(new FileWriter(new File("E:/java /a.txt"),true)); //実際にストリームオブジェクトをラップする
			bw.newLine(); //空行を書く
			bw.write("こんにちは。");
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			try {
				bw.flush(); //キャッシュされたデータをハードドライブにフラッシュする
				bw.close(); // 
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
例:a.txtからd.txtへデータをコピー コード:
public class BufferedInputStreamAndBufferedOutputSream {
	public static void main(String[] args) {
		//a.txtdにコピーする.txt
		BufferedInputStream bis = null;
		BufferedOutputStream bos = null;
		try {
			bis = new BufferedInputStream(new FileInputStream(new File("E:/java /a.txt"))); // 
			bos = new BufferedOutputStream(new FileOutputStream(new File("D:\\d.txt"))); // 
			byte[] bytes = new byte;
			int length = 0;
			while((length=bis.read(bytes))!=-1){
				bos.write(bytes, 0, length);
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			try {
				bos.flush();
				bos.close();
				bis.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}
同じ関数のために今、操作クラスの2つのグループを使用することができますので、どのように正確に使用する方法の開発では、どちらが良いでしょうか?





