1. 程式人生 > >thinking in java (十九) ----- IO系列總覽

thinking in java (十九) ----- IO系列總覽

io簡介

java io是為了實現“檔案”,“控制檯”,“網路裝置”這些輸入輸出裝置之間的通訊而設計的系統。例如,對於一個檔案,我們可以開啟進行讀取與輸出。在java1.0的時候,java提供的類都是以位元組(byte)為單位,到了java1.1,為了國際化,添加了許多以字元(Unicode)為單位進行操作的類

IO中我們常說到的一個概念是“流”,所謂“流”就是一種抽象的資料總稱,本質是為了進行傳輸。

1)按照流的資料流向,可以分為輸入流和輸出流

2)按照流中的資料單位,可以分為位元組流和字元流

IO框架

1,以位元組為單位的輸入流框架圖。

  1. InputStream是以位元組為單位的輸入流的超類。InputStream提供了read()方法從輸入流讀取位元組資料
  2.  ByteArrayInputStream是位元組陣列輸入流。它包含有一個緩衝區,該緩衝區包含從流中讀取的資料,通俗點說,他的內部緩衝區就是一個位元組陣列,而ByteArrayInputStream就是通過位元組陣列實現的
  3. PinpedInputStream是管道輸入流,他一般和PinpedOutputStream搭配使用,能實現多執行緒間的管道通訊
  4. FilterInputStream是過濾輸入流,他是BufferdInputStream和DataInputStream的父類
  5. DataInputStream是資料輸入流,它是用來裝飾其他輸入流,他允許程式以機器無關方式從底層輸入流中讀取基本java型別
  6. BufferedInputStream是緩衝輸入流,他的作用是為另一個輸入流新增緩衝功能
  7. File是檔案和目錄路徑名的抽象表示形式。注意兩點,a)File不僅僅表示檔案,也可以表示目錄b)File的父類是Object,不是inputStream
  8. FileDescriptor是“檔案描述符”,可以用來表示開放檔案,開放套接字等
  9. FileInputStream是檔案輸入流, 通常用來對檔案進行讀取操作
  10. ObjectInputStream是物件輸入流,和ObjectOutputStream一起,用提供對基本資料或者物件的持久儲存

2,以位元組為單位的輸出流的框架圖

  1.  OutPutStream是以位元組為單位的輸出流的超類,OutPutStream提供了write()方法從輸出流中寫入位元組資料
  2. ByteArrayOutputStream是位元組輸出流,寫入ByteArrayOutputStream的資料被寫入到一個byte陣列,可以使用toByteArray,toString獲取資料
  3. PipedOutPutStream是管道輸出流,他和PipedInPutStream配合使用,能夠實現多執行緒的管道通訊
  4. FilterOutputStream是過濾輸出流,另外倆類的父類
  5. DataOutputStream是資料輸出流用來裝飾其他輸出流,他允許程式以機器無關方式從底層輸入流中讀取基本java型別
  6. BufferedOutputStream是緩衝輸出流,他的作用是為另一個輸出流新增緩衝功能
  7. PrintStream是列印輸出流,能為其他輸出流新增功能,方便列印
  8. FileOutputStream是檔案輸出流,常常用於檔案寫入操作
  9. ObjectOutputStream是物件輸出流,和ObjectInputStream一起,用來提供對基礎資料或者物件的持久儲存

3,以位元組為單位的輸入流和輸出流關聯的框架圖

 

4,以字元為單位的輸入流框架圖

  1. Reader是字元為單位的輸入流的超類,提供了read方法來讀取字元資料
  2.  CharArrayReader是字元陣列輸入流,用於讀取字元陣列,操作的資料是以字元為單位
  3. PipedReader是字元類的管道輸入流,和PipedWriter一起通過管道進行執行緒間的通訊,在使用管道通訊是嗎,這兩個類必須一起使用
  4. FilterReader是字元型別的過濾輸入流
  5. BufferedReader是字元緩衝輸入流,他的作用是為另外一個輸入流新增緩衝功能
  6. InputStreamReader是位元組轉字元的輸入流,是位元組和字元流的橋樑,它使用指定的charset讀取位元組並將其解碼為字元
  7. FileReader是字元類檔案的檔案輸入流,常用於對檔案進行讀取操作

5,以字元為單位的輸出流框架圖

  1. Writer 是以字元為單位的輸出流的超類。它提供了write()介面往其中寫入資料。
  2. CharArrayWriter 是字元陣列輸出流。它用於讀取字元陣列,它繼承於Writer。操作的資料是以字元為單位!
  3.  PipedWriter 是字元型別的管道輸出流。它和PipedReader一起是可以通過管道進行執行緒間的通訊。在使用管道通訊時,必須將PipedWriter和PipedWriter配套使用。
  4. FilterWriter 是字元型別的過濾輸出流。
  5. BufferedWriter 是字元緩衝輸出流。它的作用是為另一個輸出流新增緩衝功能。
  6. OutputStreamWriter 是位元組轉字元的輸出流。它是位元組流通向字元流的橋樑:它使用指定的 charset 將位元組轉換為字元並寫入。
  7. FileWriter 是字元型別的檔案輸出流。它通常用於對檔案進行讀取操作。
  8. PrintWriter是字元類的列印輸出流,用來裝飾其輸出流,使其能夠方便地列印

6,以字元為單位的輸入流和輸出流的關聯框架圖

7,位元組和字元輸入流對應關係

8,位元組和字元輸出流對應的關係

9,位元組流與字元流的轉換 

有時候位元組流和字元流需要相互轉換,有兩個類InputStreamReader和OutputStreamWriter,用來進行字元流和位元組流之間的轉換。

InputStreamReader用於講一個位元組流中的位元組解碼為字元

OutputStreamReader用於將寫入的字元編碼成位元組後吸入一個位元組流

 

 

原文:http://www.cnblogs.com/skywang12345/p/io_01.html