thinking in java (十九) ----- IO系列總覽
阿新 • • 發佈:2018-11-08
io簡介
java io是為了實現“檔案”,“控制檯”,“網路裝置”這些輸入輸出裝置之間的通訊而設計的系統。例如,對於一個檔案,我們可以開啟進行讀取與輸出。在java1.0的時候,java提供的類都是以位元組(byte)為單位,到了java1.1,為了國際化,添加了許多以字元(Unicode)為單位進行操作的類
IO中我們常說到的一個概念是“流”,所謂“流”就是一種抽象的資料總稱,本質是為了進行傳輸。
1)按照流的資料流向,可以分為輸入流和輸出流
2)按照流中的資料單位,可以分為位元組流和字元流
IO框架
1,以位元組為單位的輸入流框架圖。
- InputStream是以位元組為單位的輸入流的超類。InputStream提供了read()方法從輸入流讀取位元組資料
- ByteArrayInputStream是位元組陣列輸入流。它包含有一個緩衝區,該緩衝區包含從流中讀取的資料,通俗點說,他的內部緩衝區就是一個位元組陣列,而ByteArrayInputStream就是通過位元組陣列實現的
- PinpedInputStream是管道輸入流,他一般和PinpedOutputStream搭配使用,能實現多執行緒間的管道通訊
- FilterInputStream是過濾輸入流,他是BufferdInputStream和DataInputStream的父類
- DataInputStream是資料輸入流,它是用來裝飾其他輸入流,他允許程式以機器無關方式從底層輸入流中讀取基本java型別
- BufferedInputStream是緩衝輸入流,他的作用是為另一個輸入流新增緩衝功能
- File是檔案和目錄路徑名的抽象表示形式。注意兩點,a)File不僅僅表示檔案,也可以表示目錄b)File的父類是Object,不是inputStream
- FileDescriptor是“檔案描述符”,可以用來表示開放檔案,開放套接字等
- FileInputStream是檔案輸入流, 通常用來對檔案進行讀取操作
- ObjectInputStream是物件輸入流,和ObjectOutputStream一起,用提供對基本資料或者物件的持久儲存
2,以位元組為單位的輸出流的框架圖
- OutPutStream是以位元組為單位的輸出流的超類,OutPutStream提供了write()方法從輸出流中寫入位元組資料
- ByteArrayOutputStream是位元組輸出流,寫入ByteArrayOutputStream的資料被寫入到一個byte陣列,可以使用toByteArray,toString獲取資料
- PipedOutPutStream是管道輸出流,他和PipedInPutStream配合使用,能夠實現多執行緒的管道通訊
- FilterOutputStream是過濾輸出流,另外倆類的父類
- DataOutputStream是資料輸出流用來裝飾其他輸出流,他允許程式以機器無關方式從底層輸入流中讀取基本java型別
- BufferedOutputStream是緩衝輸出流,他的作用是為另一個輸出流新增緩衝功能
- PrintStream是列印輸出流,能為其他輸出流新增功能,方便列印
- FileOutputStream是檔案輸出流,常常用於檔案寫入操作
- ObjectOutputStream是物件輸出流,和ObjectInputStream一起,用來提供對基礎資料或者物件的持久儲存
3,以位元組為單位的輸入流和輸出流關聯的框架圖
4,以字元為單位的輸入流框架圖
- Reader是字元為單位的輸入流的超類,提供了read方法來讀取字元資料
- CharArrayReader是字元陣列輸入流,用於讀取字元陣列,操作的資料是以字元為單位
- PipedReader是字元類的管道輸入流,和PipedWriter一起通過管道進行執行緒間的通訊,在使用管道通訊是嗎,這兩個類必須一起使用
- FilterReader是字元型別的過濾輸入流
- BufferedReader是字元緩衝輸入流,他的作用是為另外一個輸入流新增緩衝功能
- InputStreamReader是位元組轉字元的輸入流,是位元組和字元流的橋樑,它使用指定的charset讀取位元組並將其解碼為字元
- FileReader是字元類檔案的檔案輸入流,常用於對檔案進行讀取操作
5,以字元為單位的輸出流框架圖
- Writer 是以字元為單位的輸出流的超類。它提供了write()介面往其中寫入資料。
- CharArrayWriter 是字元陣列輸出流。它用於讀取字元陣列,它繼承於Writer。操作的資料是以字元為單位!
- PipedWriter 是字元型別的管道輸出流。它和PipedReader一起是可以通過管道進行執行緒間的通訊。在使用管道通訊時,必須將PipedWriter和PipedWriter配套使用。
- FilterWriter 是字元型別的過濾輸出流。
- BufferedWriter 是字元緩衝輸出流。它的作用是為另一個輸出流新增緩衝功能。
- OutputStreamWriter 是位元組轉字元的輸出流。它是位元組流通向字元流的橋樑:它使用指定的 charset 將位元組轉換為字元並寫入。
- FileWriter 是字元型別的檔案輸出流。它通常用於對檔案進行讀取操作。
- PrintWriter是字元類的列印輸出流,用來裝飾其輸出流,使其能夠方便地列印
6,以字元為單位的輸入流和輸出流的關聯框架圖
7,位元組和字元輸入流對應關係
8,位元組和字元輸出流對應的關係
9,位元組流與字元流的轉換
有時候位元組流和字元流需要相互轉換,有兩個類InputStreamReader和OutputStreamWriter,用來進行字元流和位元組流之間的轉換。
InputStreamReader用於講一個位元組流中的位元組解碼為字元
OutputStreamReader用於將寫入的字元編碼成位元組後吸入一個位元組流