Java基礎I/O流型別

lanchengxiaoxiao發表於2012-04-21

Java把不同的資料來源與程式間的資料傳輸都抽象為“流”,以實現相對統一而簡單的輸入/輸出(I/O,Input/Output)操作方式。

I/O流的分類有多種方式:

  •     按照資料流動的方向,可以分為輸入流(InputStream)和輸出流(OutputStream)。  

         輸入流只能從中讀取資料,而不能向其寫出資料;而輸出流則只能向其寫出資料,而不 能從中讀取資料。這裡是站在程式的角度來確定出入方向,即將資料從程式外部傳

         送到程式中謂之“輸入”資料。反之,為輸出。

  • 根據資料流所關聯的是資料來源還是其他資料流,可以分為節點流(Node Stream)和處理流(Processing Stream)。

        節點流直接與資料來源連線,處理流不直接連到資料來源。

  • 按照傳輸資料的“顆粒大小”劃分,可分為字元流(Character Stream)和位元組流(Byte Stream)。

           凡是以InputStream和OutputStream結尾的型別均為位元組流,凡是以Reader和Writer結尾的均為字元流

 

 基礎I/O流型別

  • InputStream

       抽象類java.io.InputStream是所有位元組輸入流型別的父類,該類中定義了以位元組為單位讀取資料的基本方法,並在其子類進行了分化和實現。

InputStream類中定義的方法包括

Java程式碼  收藏程式碼
  1. <span style="font-size: small;">public abstract int read()  
  2. 從此輸入流中讀下一個位元組。位元組值被轉換為0-255之間的一個(無符號)整數返回,到達流的結尾無位元組可讀時將返回-1。  
  3. public int read(byte[] b)  
  4. 從此輸入流中讀取一定數目的位元組並存入緩衝陣列b。實際讀取的位元組數被作為一個整數返回,到達流的結尾無位元組時將返回-1。  
  5. public int read(byte[],int off, int len)  
  6. 從此輸入流中讀取最多len個位元組的資料到一個位元組陣列。它將盡可能去讀取len個位元組的資料,但可能只讀取到較少數目的位元組,實際讀取的位元組數被作為一個整數返回,到達流的結尾無位元組可讀時將返回-1。  
  7. public void close()  
  8. 關閉此輸入流並釋放任何與這個流相關聯的系統資源。  
  9. public int available()  
  10. 返回此後從此輸入流中還可以無阻塞地讀取(或跳過)的位元組數。  
  11. public long skip(long n)  
  12. 跳過並丟棄輸入流中的n個位元組資料。  
  13. public boolean markSupported()  
  14. 測試此輸入流是否支援mark()和reset()方法。InputStream類的markSupported方法返回false,在其子類中產生了分化。  
  15. public synchronized void mark(int readlimit)  
  16. 標記此輸入流中的當前位置。隨後呼叫reset()方法時,將把這個流重置於最後一次標記的位置,從而使隨後的讀取重讀同樣的位元組。引數readlimit指明輸入流在標記位置失效前允許讀多少位元組。  
  17. public synchronized void reset()  
  18. 將此輸入流重置於上一次在這個輸入流上呼叫mark()方法時的位置。</span>  
  •   OutputStream

      java.io.OutputStream與java.io.InputStream是對應,是所有位元組輸出流型別的抽象父類。 

Java程式碼  收藏程式碼
  1. public abstract write(int b)  
  2. 將b的二進位制表示值低8位組成一個位元組,寫出到此輸出流。  
  3. public void write(byte b[])  
  4. 將位元組陣列b中的全部b.length個位元組一次寫出到此輸出流。  
  5. public void write(byte b[],int off,int len)  
  6. 將位元組陣列b中下表off開始的len個位元組寫入到此輸出流。  
  7. public void close()  
  8. 關閉此輸入流並釋放任何與之相關聯的系統資源。  
  9. public void flush()  
  10. 清空此輸出流,即將任何被緩衝輸出的位元組立即傳送到輸出流中。  
  •  Reader

 抽象類java.io.Reader是所有字元輸入流的父類,其中宣告瞭用於讀取字元流的有關方法。

Java程式碼  收藏程式碼
  1. Reader 類中定義的方法有:  
  2. public int read()  
  3. 從此輸入流中讀取一個字元,並轉換為0-65535範圍的整數返回,到達流的結尾時返回-1。  
  4. public int read(char cbuf[])  
  5. 將字元讀入陣列cbuf,並返回實際讀取的字元數,到達流的結尾時返回-1。  
  6. public int read(char cbuf[],int off,int len)  
  7. 將字元讀入陣列cbuf中從off開始的空間,每次最多讀len個字元,返回實際讀取的字元數,到達流的結尾時返回-1。  
  8. public boolean ready()  
  9. 判斷此流是否準備好,如是,則可以進行讀操作。  
  10. 還有一些與InputStream類相似的。  
  11. public abstract void close();  
  12. public long skip(long n)  
  13. public boolean markSupported();  
 
  • Writer

       java.io.Writer與java.io.Reader類對應,是所有字元輸出流型別的共同父類,也是一個抽象類,其中宣告的方法如下:

Java程式碼  收藏程式碼
  1. Writer類中定義的主要方法有:    
  2. public void write(int c)    
  3. 擷取引數c二進位制形式的低16位組成一個字元,並將其寫出到當前物件所關聯的資料來源中。    
  4. public void write(char cbuf[])    
  5. 將陣列cbuf中的字元依次寫出。    
  6. public void write(char cbuf,int off, int len)    
  7. 將陣列cbuf中下標off開始的len個字元寫出。    
  8. public void write(String str)    
  9. 將字串str中的全部字元依次寫出。    
  10. public void write(String str,int off,int len)    
  11. 將字串str中下標off開始的len個字元寫出。    
  12. public abstract void close()    
  13. 關閉此輸出流並釋放任何與之相聯絡的系統資源。    
  14. public abstract void flush()    
  15. 清空此輸出流,即將任何被緩衝輸出的字元立即傳送到輸出流中。    
  16. public void mark(int readAheadLimit)     
  17. public void reset()   

相關文章