1. 程式人生 > >java io體系介紹

java io體系介紹

前言

       本文對java的io體系進行介紹。

1 總概

       IO,Input/Output,輸入和輸出。

       java的io處理分為兩類,一類為位元組流,一類為字元流。位元組流處理的頂層介面為InputStream和OutputStream,字元流處理的頂層介面為Writer和Reader。

2 InputStream

       本節對InputStream及其體系進行介紹。

       InputStream體系關係如下圖所示。

      

2.1 InputStream

輸入流的父類,提供read方法從stream中讀取位元組,有三種類型的read方法。

read(),讀取輸入流的下一個位元組,返回值為0到255,如果沒有,則會返回-1。該方法一直block直到有資料可讀。

read(byte b[]),從輸入流中讀取一定數量的位元組,位元組儲存在一個位元組陣列中。該方法一直block直到有資料可讀。

            read(byte b[], int off, int len),從輸入流中讀取len長度的位元組,位元組儲存到一個位元組陣列中,off為讀取的第一個位元組在位元組陣列中的位置。該方法一直block直到有資料可讀。

2.2 ByteArrayInputStream      

ByteArrayInputStream,內部包含一個buffer,buffer中儲存位元組,buffer由陣列實現。其read方法是同步的,內部有一個pos,代表著下一個要讀的位元組在buffer中的位置。

2.3 FileInputStream

FileInputStream,用於從File中讀取位元組,constructor可以是一個File物件,也可以是一個String,String表示的是File所在的路徑。

2.4 PipedInputStream

PipedInputStream,管道輸入流。一個管道輸入流應該連線到管道輸出流,然後管道輸入流可以讀取到寫入到管道輸出流中的資料。通常,一個執行緒可以從管道輸入流中讀取資料,而這些資料由其他對應的執行緒向管道輸出流中寫入。當連線到管道的執行緒不再alive時,管道將broken。

2.5 ObjectInputStream

ObjectInputStream,可以反序列化序列化到ObjectOutputStream中的obejct或者其他型別資料,提供readObejct方法,返回值為Obejct。

public static Object toObject(byte[] bytes) {  
        ByteArrayInputStream bais = new ByteArrayInputStream(bytes);  
        ObjectInputStream ois = null;  
        try {  
            ois = new ObjectInputStream(bais);  
            Object object = ois.readObject();  
            return object;  
        } catch(IOException ex) {  
            throw new RuntimeException(ex.getMessage(), ex);  
        } catch(ClassNotFoundException ex) {  
            throw new RuntimeException(ex.getMessage(), ex);  
        } finally {  
            try {  
                ois.close();  
            } catch (Exception e) {}  
        }  
 }
         

2.6 FilterInputStream

FilterInputStream,包含一些其他的輸入流,其一些子類提供輸入流處理的其他功能。其子類有BufferedInputStream,DataInputStream,PushbackInputStream,LineNumberInputStream。

BufferedInputStream,緩衝輸入支援和支援mark、reset操作,緩衝通過內部的一個byte陣列實現。

DataInputStream,支援應用程式從輸入流中讀取java的內部型別,例如int,char等。

PushbackInputStream,擁有一個Pushback緩衝區,可以將位元組推回而重新讀取。

LineNumberInputStream,已經Deprecated了。

2.7 其他

StringBufferInputStream,已經Deprecated。

SequenceInputStream,可以按順序讀取多個流。

3 OutputStream

       OutputStream,輸出流,提供write方法寫入位元組到流中。本節對OutputStream及其體系進行介紹。

       OutputStream相關類如下圖所示。

      

4 Writer

5 Reader