JavaIOの原理過程を浅く分析する


IOストリームは、デバイス間のデータ伝送を処理するために使用される.
Javaプログラムでは、データの入出力操作を「ストリーム」として行う.ソースノードからターゲットノードへのデータフロー
ソースノードおよびターゲットノードは、ファイル、ネットワーク、メモリ、キーボード、ディスプレイなどであってもよい.
java.ioパッケージの下には、異なる種類のデータを取得し、標準的な方法でデータを入力または出力するための様々な「ストリーム」クラスとインタフェースが用意されています.
Input入力:外部データ(ディスク、光ディスクなどの記憶装置のデータ)をプログラム(メモリ)に読み出す.
出力output:プログラム(メモリ)データをディスク、光ディスクなどの記憶装置に出力する
操作データ単位によって、バイトストリーム(8 bit)、文字ストリーム(16 bit)に分けられます.
データストリームの流れによって、入力ストリーム、出力ストリームに分けられます.
 
バイトストリーム
文字ストリーム
にゅうりょくりゅう
InputStream(ベースクラス)
Reader(ベースクラス)
しゅつりょくりゅう
OutputStream(ベースクラス)
Writer(ベースクラス)
ストリーム内のデータ
バイナリバイト(8ビット)
Unicode文字(16ビット)
 
JavaのIOストリームは40以上のクラスに関連しており,実際には非常に規則的であり,いずれも以下の4つの抽象ベースクラスから派生している.
この4つのクラスから派生したサブクラス名は,いずれもその親の名作をサブクラス名接尾辞としている.
テキストファイルでもバイナリファイルでも、ファイルデータを読み込む必要がある場合は、次の手順に従います.
ファイル入力フローを使用して、指定したファイルを開きます.
テキストファイルの場合は、文字入力ストリームFileReaderストリームを使用します.
バイナリ・ファイルの場合は、バイト入力ストリームFileInputStreamストリームを使用します.
ファイルデータの読み込み
入力フローを閉じる
テキストファイルでもバイナリファイルでも、データをファイルに書き込む必要がある場合は、次の手順に従います.
ファイル出力ストリームを使用して、指定したファイルを開きます.
テキストファイルの場合は、文字出力ストリームFileWriterストリームを使用します.
バイナリ・ファイルの場合は、バイト出力ストリームFileOutputStreamストリームを使用します.
ファイルにデータを書き込む
出力ストリームを閉じる
package com.xatu.IO;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;

import org.junit.Test;

public class IOTest {
/*
 *    IO  
 *   
 *   
 *   (  )//         ,            ,        
 *         
 */
	@Test
	public void testFileReader() {
		Reader fr = null;
		
			try {//   ,    
				fr = new FileReader("input.txt");
				//       
				char[] buf = new char[100];
				int realCount = 0;
				while ((realCount = fr.read(buf)) != -1) {
					//for (int i = 0; i 

既存のファイルの出力ストリームを開いてデータを書き込む準備をするには、次の2つの方法があります.
空で開く
追加で開く
ReaderとInputStreamはすべての入力ストリームのベースクラスです.
Reader(典型的な実装:FileReader)
int read()/1文字読み出し
int read(char[]c)/複数文字をバッファ配列に一度に読み出す
int read(char [] c, int off, int len)
InputStream(典型的な実装:FileInputStream)
int read()/1バイト読み出し
int read(byte[]b)/バッファ配列への複数バイトの一括読み出し
int read(byte[] b, int off, int len)
プログラムで開いているファイルIOリソースはメモリ内のリソースではなく、オペレーティングシステムに関連するリソースです.ごみ回収メカニズムではこの資源を回収できないので、ファイルIO資源を明示的に閉じるべきである.
WriterとOutputStreamもよく似ています.
void write(int b/int c);//ストリームへのバイト/文字の書き込み
void write(byte[] b/char[] cbuf);//ストリームに配列を書く
void write(byte[] b/char[] buff, int off, int len);
void flush();
void close(); このストリームを閉じる前にリフレッシュする必要があります
文字ストリームは直接文字を操作単位とするため、Writerは文字配列、すなわちStringオブジェクトをパラメータとして文字列で置き換えることができる.
void write(String str);
void write(String str, int off, int len);
@Test
	public void testFileWriter() {
		Writer fw = null;
		try {
			fw = new FileWriter("output",true);//     true             
			
			String[] text = {
					"zheshiyaoxiedewenjian
", "zheshiyaoxiedewenjian
", "zheshiyaoxiedewenjian
", "zheshiyaoxiedewenjian
", "zheshiyaoxiedewenjian
", "zheshiyaoxiedewenjian
", "zheshiyaoxiedewenjian
" }; for (String line : text) { char[] buf = line.toCharArray();// //fw.write(buf);// fw.write(buf, 0, 22);// 3 , 9 } } catch (Exception e) { e.printStackTrace(); }finally { try { fw.close();// close flush } catch (IOException e) { e.printStackTrace(); } } } }

Windowsシステムでは、テキストファイルの行の最後に2つの非表示の特殊文字が行の終わりを表します.
この2文字を符号(Unicode符号は13)と符号(Unicode符号10)として-シーケンスと呼ぶ.
Unixシステムでは、テキストファイルの各行の末尾に文字しかありません.
Java言語では、符号は'r'で表され、符号は'''で表される.
System.out.println文は、1行の内容を出力した後、出力-シーケンスを継続し、表示効果からカーソルを次の行に移動させることから始まります.
通常は改行するだけです