IO流-常用的IO流總結
Java中IO流是個特別重要的知識點,IO流承包了向檔案中寫入和讀取資料的工作,是個必不可少的部分。Java.io包中最重要的就是5個類和一個介面。5個類指的是File、OutputStream、InputStream、Writer、Reader;一個介面指的是Serializable.
Java I/O主要包括如下幾個層次,包含三個部分:
流式部分:IO的主體部分;
非流式部分:主要包含一些輔助流式部分的類,如:File類、RandomAccessFile類和FileDescriptor等類;
其他類:檔案讀取部分的與安全相關的類。
主要的類如下:
File(檔案特徵與管理):用於檔案或者目錄的描述資訊,例如生成新目錄,修改檔名,刪除檔案,判斷檔案所在路徑等。
InputStream(二進位制格式操作):抽象類,基於位元組的輸入操作,是所有輸入流的父類。定義了所有輸入流都具有的共同特徵。
OutputStream(二進位制格式操作):抽象類。基於位元組的輸出操作。是所有輸出流的父類。定義了所有輸出流都具有的共同特徵。
Java中字元是採用Unicode標準,一個字元是16位,即一個字元使用兩個位元組來表示。為此,JAVA中引入了處理字元的流。
Reader(檔案格式操作):抽象類,基於字元的輸入操作。
Writer(檔案格式操作):抽象類,基於字元的輸出操作。
Java I/O流主要包含字元流,位元組流和轉換流,下面將詳細介紹這三種流:
位元組流
- InputStream抽象類
InputStream 為位元組輸入流,該抽象類是所有位元組輸入流類的超類,且資料單位為位元組(8bit)。Inputstream類中的常用方法:
1. public abstract int read( ):讀取一個byte的資料,返回值是高位補0的int型別值。若返回值=-1說明沒有讀取到任何位元組讀取工作結束。
2. public int read(byte b[ ]):讀取b.length個位元組的資料放到b陣列中。返回值是讀取的位元組數。該方法實際上是呼叫下一個方法實現的
3. public int read(byte b[ ], int off, int len):從輸入流中最多讀取len個位元組的資料,存放到偏移量為off的b陣列中。
4. public int close( ) :我們在使用完後,必須對我們開啟的流進行關閉.
主要的子類:
(1)FileInputStream:用於讀取本地檔案中的位元組資料;
`FileInputStream bin = new FileInputStream(new File(fileName)); `
(2)BufferedInputStream:緩衝位元組輸入流,是一個帶有緩衝區的輸入流,緩衝流就是每一個數據流分配一個緩衝區,一個緩衝區就是一個臨時儲存資料的記憶體。這樣可以減少訪問硬碟的次數,提高傳輸效率。
FileInputStream in = new FileInputStream(new File(fileName));
BufferedInputStream bin = new BufferedInputStream(in);
- OutputStream抽象類
OutputStream提供了3個write方法來做資料的輸出,這個是和InputStream是相對應的。
1. public void write(byte b[ ]):將引數b中的位元組寫到輸出流。
2. public void write(byte b[ ], int off, int len) :將引數b的從偏移量off開始的len個位元組寫到輸出流。
3. public abstract void write(int b) :先將int轉換為byte型別,把低位元組寫入到輸出流中。
4. public void flush( ) : 將資料緩衝區中資料全部輸出,並清空緩衝區。
5. public void close( ) : 關閉輸出流並釋放與流相關的系統資源。
主要的子類:
(1)FileOutputStream:用於向本地檔案中的寫入位元組資料;
FileOutputStreamout = new FileOutputStream(filename);
(2)BufferedOutputStream:緩衝位元組輸出流,是一個帶有緩衝區的輸出流,可以提高寫入效率;
FileOutputStreamout = new FileOutputStream(filename);
BufferedOutputStream bin = new BufferedInputStream(out);
字元流
Java中字元是採用Unicode標準,一個字元是16位,即一個字元使用兩個位元組來表示。為此,JAVA中引入了處理字元的流。
- Reader抽象類
用於讀取字元流的抽象類。子類必須實現的方法只有 read(char[], int, int) 和 close()。
主要的子類:
(1) FileReader :主要用來讀取字元檔案,使用預設的字元編碼;
FileReader fr = new FileReader(new File(filename));
(2)BufferedReader : 接受Reader物件作為引數,並對其新增字元緩衝器,使用readline()方法可以讀取一行。
BufferedReader br = new BufferedReader(new FileReader(new File(filename));
(3)InputStreamReader:從輸入流讀取位元組,在將它們轉換成字元(轉化流)
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(new File(filename)));
- Writer抽象類
寫入字元流的抽象類。子類必須實現的方法僅有 write(char[], int, int)、flush() 和 close()。
主要的子類:
(1)FileWrite:將字元型別資料寫入檔案,使用預設字元編碼和緩衝器大小。
FileWrite fw = new FileWrite(new File(filename));
(2)BufferedWriter:接受Writer物件作為引數,並對其新增字元緩衝器,使用newLine()方法可以寫一行。
BufferedWriter bw = new BufferedWriter(new FileWriter(new File(filename));
(3)OutputStreamWriter:從輸出流讀取位元組,在將它們轉換成字元(轉化流)
BufferedWriter br = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File(filename)));