21-I / O(入力および出力ストリーム)-文字とバイト

みなさん、こんにちは。私はキャベツでアーチ型の豚です。

1.入力および出力ストリームの概要

この段階でノックするコードは通常、コンソールに基づいています。
System.out — System.out.printでデータを出力します(「出力先は画面です」)。
入力はSystem.inです。最初にスキャナーオブジェクトを定義し、ユーザーがコンソールで入力したデータをスキャンします
スキャナースキャン=新しいスキャナー(System.in);入力のソースは、コンソールのユーザー入力
(1)から取得されます判定出力と出力ストリーム入出力
の判定はプログラム
によるファイルの読み込み―入力(プログラム内)
ファイルの書き込み―出力(プログラムからの情報)
(2)読み込みが入力、書き込み(書き込み) )出力です
プログラムコードは自分の脳であると想像します本を読むとき、それは知識を脳に入力するプロセスです。それから、いくつかのアイデアを持ち、頭の中で考えたことを紙に書きましたが、これは出力プロセスですか?すべては私たちの脳、つまりプログラムに基づいています。
(3)JDBC、プログラムとデータベース間の入力と出力入力
ここに画像の説明を挿入
ストリームと出力ストリームは、飲み物を飲むときのストローのように、2つのデータ伝送チャネルです。入出力の流れの方向は非常にシンプルであると判断します。つまり、ミルクティーのように自分自身を基準にすると、チューブを挿入して穴を開けるのが難しくなります。特定のプログラムでは、プログラムを参照オブジェクトとして使用し、チューブをデータベースに挿入してから、このチューブを通じてデータを取得するため、入力ストリームと出力ストリームの方向はすべてデータベースに送られます。パールミルクティーを飲むと、真珠を口に入れるとすぐに出てきますか?データは同じです。図中の緑色の矢印の流れがデータの流れです。
(4)ファイルとファイルの入出力
先ほどお話ししたのは、プログラムとデータベース間のデータの傾向です。あるファイルのデータを別のファイルにコピーしたい、このファイルとファイルの間にパイプがあるかどうかを確認したい、はい、前のファイルはソースファイルと呼ばれ、データに書き込まれるファイルはターゲットと呼ばれますファイル。それらの間には小さな穴があり、データの出入りが可能です。ソースファイルは出力ストリームパイプラインに挿入され、ターゲットファイルは入力ストリームパイプラインに挿入されます。2つのパイプは名前が異なり、2つの独立したパイプです。直接接続することはできません。代わりに、プログラムを使用してデータの相互作用を実装します。図に示すように、入力ストリームと出力ストリームの方向はプログラムに基づいていますが、ストローの挿入方法を考えてみてください。
(5)2つの一般的な入力及び出力ストリーム
リーダー/ライターデータが文字伝送の形で、主にテキスト
入力ストリーム/ OUTSTREAMデータはバイト輸送の形、画像、オーディオ、これらのような主にハイパーテキストを( )

2.ファイル内のデータを別のファイルに書き込む方法について話しましょう

(1)最初に、2つのファイルを作成する必要があります。1つはソースファイルで、もう1つはターゲットファイルです。

	//源
			File 源文件 = new File("d:/test0807/a.txt");
			
			//目标
			File 目标文件 = new File("d:/test0807/x.txt");

2)入力ストリーム、出力ストリーム(2つのパイプ)を作成し、それらが挿入されている場所を通知します。

			FileReader 输入流 = new FileReader(源文件);
			
			FileWriter 输出流 = new FileWriter(目标文件);

ここでのFIleReaderは入力ストリームであり、パラメーターは挿入する場所、つまり接続するファイルを指示することです。
(3)バッファ領域を作成し、最初にプログラムにデータを保存してから、Reader / Wrieterが文字の形式であるターゲットファイルに書き込むため、これらのデータを最初にキャッシュする文字配列を定義します。文字配列の長さはどれくらいですか?実車同様、生産現場から建設現場まで大量の砂を輸送する必要があり、完全に設置可能なタクシーを構築するのではなく、小型車を複数回に分けて輸送します。これはバッファリングの理由でもあり、文字配列をカートと見なし、終了するまで前後に移動するため、ここではループにする必要があります。
文字配列の長さを5と定義し、ソースファイルの長さを13と定義すると、3回転送する必要があるため、ターゲットファイルの長さは15になります。2文字分のスペースが無駄になっていますか?無駄の種類、書き込み()は達成に役立ちます

			char[] 临时缓冲区 = new char[5];
			
			int len = 0;
			while ((len = 输入流.read(临时缓冲区)) > 0) {
				输出流.write(临时缓冲区, 0, len);
			}
			

最初にlen = 0を定義し、それを使用してソースファイルから読み取ったデータの長さと等しくし、それが0より大きい場合は、それをターゲットファイルに書き込みます。0に等しいと、読み取りが完了したことを意味します。出力stream.write(一時バッファー、0、len);は、バッファー内のデータの後にターゲットファイル内のデータが続くことを意味し、0はオフセットを表します。たとえば、「みなさん、こんにちは、ハンサムです」と言います。 、最初のループは「こんにちはみんな、私は」合計5文字に書き込まれ、オフセットが-1の場合、次のコンテンツは「こんにちはみんな、私のハンサムな男」は「はい」を上書きし、lenは表します長さを書きなさい。説明では、出力stream.write(一時バッファー、0、len);は、前述の13に従って、一時バッファーのデータをオフセット0に従ってlenの長さに書き込み、最終的な長さは3であるため、回避します無駄。
(4)開封後は必ず投入口と排出口を閉じ、飲み物がなくなったら蓋をしてください。

			输入流.close();
			输出流.close();

以下は完全なコードです

public static void main(String[] args) {
		try {

			//源
			File 源文件 = new File("d:/test0807/a.txt");
			
			//目标
			File 目标文件 = new File("d:/test0807/x.txt");
			
			FileReader 输入流 = new FileReader(源文件);
			
			FileWriter 输出流 = new FileWriter(目标文件);
			
			/*
			 * 输入流:可以读取源文件中的数据到【程序】中
			 * 输出流:可以把【程序】中的数据,写入到目标文件
			 * */
			
			//创建一个临时存储区域,buffer(缓冲)
			char[] 临时缓冲区 = new char[5];
			
			int len = 0;
			while ((len = 输入流.read(临时缓冲区)) > 0) {
				输出流.write(临时缓冲区, 0, len);
			}
			
			输入流.close();
			输出流.close();
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

以下は、FIleInputStream / FileOutputStreamの例です。
違いは、1つはchar配列で、もう1つはバイト配列です。

public static void main(String[] args) {
		try {
			File 源文件 = new File("d:/test0807/normal.png");
			
			File 目标 = new File("d:/test0807/target.png");
			
			InputStream 输入流 = new FileInputStream(源文件);
			
			OutputStream 输出流 = new FileOutputStream(目标);
			
			byte[] buffer = new byte[1024];
			
			int len = 0;
			while ((len = 输入流.read(buffer)) > 0) {
				输出流.write(buffer, 0, len);
			}
			
			/*输入流.read(buffer);
			输出流.write(buffer);*/
			
			输入流.close();
			输出流.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
元の記事を24件公開 賞賛された4件 2038回の訪問

おすすめ

転載: blog.csdn.net/weixin_44226263/article/details/98881555