1. 程式人生 > >IO流-常用的IO流總結

IO流-常用的IO流總結

Java中IO流是個特別重要的知識點,IO流承包了向檔案中寫入和讀取資料的工作,是個必不可少的部分。Java.io包中最重要的就是5個類和一個介面。5個類指的是File、OutputStream、InputStream、Writer、Reader;一個介面指的是Serializable.

Java I/O主要包括如下幾個層次,包含三個部分:

  1. 流式部分:IO的主體部分;

  2. 非流式部分:主要包含一些輔助流式部分的類,如:File類、RandomAccessFile類和FileDescriptor等類;

  3. 其他類:檔案讀取部分的與安全相關的類。

    主要的類如下:

    1. File(檔案特徵與管理):用於檔案或者目錄的描述資訊,例如生成新目錄,修改檔名,刪除檔案,判斷檔案所在路徑等。

    2. InputStream(二進位制格式操作):抽象類,基於位元組輸入操作,是所有輸入流的父類。定義了所有輸入流都具有的共同特徵。

    3. OutputStream(二進位制格式操作):抽象類。基於位元組輸出操作。是所有輸出流的父類。定義了所有輸出流都具有的共同特徵。

      Java中字元是採用Unicode標準,一個字元是16位,即一個字元使用兩個位元組來表示。為此,JAVA中引入了處理字元的流。

    4. Reader(檔案格式操作):抽象類,基於字元輸入操作。

    5. 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)));