java I/O流
Java I/O流簡介:
為使程序設計簡單明了,Java把程序的輸入\輸出抽象為流(Stream),而其中輸入或輸出的數據稱為數據流.簡單地說:流就是指在計算機與輸入\輸出之間流動的數據序列.序列中的數據可以是二進制數據,也可以是其他符合某種格式規定的特定數據,如字符流等。
按照數據的流動方向:
輸入流
輸出流
按照處理數據的類型:
字節流
字符流
按照流是否直接與特定的地方相連:
節點流
處理流
輸入流與輸出流:
按照數據流相對于處理程序的流動方向來劃分。
字節流與字符流:
按處理數據的類型,流可以分為字節流與字符流,它們處理信息的基本單位分別是字節(byte)與字符(char)。四個抽象類:
InputStream 字節輸入流
OutputStream字節輸出流
Reader 字符輸入流
Writer 字符輸出流
InputStream 字節輸入流:
三個基本的讀方法
abstract int read() :讀取一個字節數據,并返回讀到的數據,如果返回-1,表示讀到了輸入流的末尾。
int read(byte[] b) :將數據讀入一個字節數組,同時返回實際讀取的字節數。如果返回-1,表示讀到了輸入流的末尾。
int read(byte[] b, int off, int len) :將數據讀入一個字節數組,同時返回實際讀取的字節數。如果返回-1,表示讀到了輸入流的末尾。off指定在數組b中存放數據的起始偏移位置;len指定讀取的最大字節數。
其它方法
long skip(long n) :在輸入流中跳過n個字節,返回實際跳過的字節數。
int available() :返回在不發生阻塞的情況下,可讀取的字節數。
void close() :關閉輸入流,釋放和這個流相關的系統資源。
OutputStream字節輸出流:
三個基本的寫方法
abstract void write(int b) :往輸出流中寫入一個字節。
void write(byte[] b) :往輸出流中寫入數組b中的所有字節。
void write(byte[] b, int off, int len) :往輸出流中寫入數組b中從偏移量off開始的len個字節的數據。
其它方法
void flush() :刷新輸出流,強制緩沖區中的輸出字節被寫出。
void close() :關閉輸出流,釋放和這個流相關的系統資源。
Reader 字符輸入流:
public int read( ) 讀入的字符轉為int返回
public int read(char b[])
public int read(char b[], int off, int len)
public long skip(long n )
public void mark(int readlimit)
public void reset( )
public boolean markSupport( )
public void close( )
Writer 字符輸出流:
public void write(int b) b的低兩字節寫到輸出流
public void write(char b[])
public void write(char b[], int off, int len)
public void write(String s)
public void write(String s, int off, int len)
public void flush( )
public void close( )
節點流與處理流:
按照流是否直接與特定的地方(如磁盤、內存、設備等)相連,分為節點流與處理流兩類。
節點流(Node Stream):可以從或向一個特定的節點直接讀寫數據,如FileReader。
處理流(Processing Stream):又稱過濾流,是對一個已存在流的連接和封裝,進而實現功能更為強大的數據讀寫功能。如BufferedReader
節點流:從特定的地方讀寫的流類,例如:磁盤或一塊內存區域。
處理流:使用節點流作為輸入或輸出。處理流是使用一個已經存在的輸入流或輸出流連接創建的。
處理流的構造方法總是要帶一個其他流對象做參數
BufferedReader in1 = new BufferedReader(new FileReader(file));
BufferedReader in2 = new BufferedReader(new
InputStreamReader(new FileInputStream(file)));
I/O流的鏈接:
Input Stream Chain
Output Stream Chain