天天看點

轉換流|學習筆記

開發者學堂課程【Java 進階程式設計:轉換流】學習筆記,與課程緊密聯系,讓使用者快速學習知識。

課程位址:

https://developer.aliyun.com/learning/course/20/detail/315

轉換流

一、轉換流

所謂的轉換流指的是可以實作位元組流與字元流操作的功能轉換。

例如:進行輸出的時候,output stream 需要将内容變為位元組數組後才可以輸出,而 Writer 可以直接輸出字元串,這一點是友善的,是以很多人就認為需要提供有一種轉換的機制來實作不同流類型的轉換操作。

為此在 java.io 包裡面提供有兩個類:

InputStreamReader、OutputStreanmwriter。

以下為兩個類的結構操作方式。

在代碼中找到類 Output stream writer和input stream reader,将其打開。

出現以下界面

Pubilic class OutputStream Writer

Extends Writer

Public class InputStreamReader

Extends Reader

以上為 output stream writer和input stream reader 的定義。

public OutputStreamWriter(OutputStream out)

public InputStreamReader(InputStream in)

以上為 output stream writer 和 input stream reader 的構造方法。

以下為轉換流:

轉換流|學習筆記

Writer 中有一個子類 output stream writer,和 writer 是同一個時期出來的。

Reader 中子類是 input stream reader。Writer 在整個設計過程中和 output stream 産生關系,Reader 若 input stream 産生關系。

接收位元組流對象利用向上轉換變成字元流對象。

轉換的本質在于對象的轉型和構造方法的接收。通過類的繼承結構與構造方法,可以發現所謂的轉換處理就是将接收到的位元組流對象通過向上轉流型變為字元流對象。

範例:觀察轉換

代碼如下

轉換流|學習筆記

在整體代碼中,file output stream 和 File 位有關。

程式在此,output 隻能操作位元組。如果加入位元組流變為字元流的代碼,可直接輸出字元串。字元流适合進行中文。

此轉換在是中文的情況下,處理較為友善,在不是中文的情況下,處理不夠友善。

但講解轉換流的主要目的基本上不是為了讓開發者去記住它,而是知道有這樣一種功能,但同時更多的是需要進行結構的分析處理。

通過之前的位元組流和字元流的一系列分析之後,你會發現 output stream 類有 fire output stream,直接子類 input stream 類有 File input stream 直接子類,但是觀察 file writer,file reader 類的繼承關系。

打開 file reader 和 file writer,觀察其繼承結構。

public class FileWriter

extends OutputStreamWriter

打開 file writer,發現 output stream writer,打開 file reader,發現 input stream reader。

證明之前的操作一直存在轉換流這一概念。

在類結構定義時,已經準确的描述出轉換流程。​

轉換流|學習筆記

通過之前的位元組流和字元流的一系列分析之後,你會發現 output stream 類有 fire output stream,直接子類 input stream 類有 File input stream 直接子類,但是觀察 file writer,file reader 類的繼承關系。

public class FileWriter

extends OutputStreamWriter

在類結構定義時,已經準确的描述出轉換流程。

轉換流|學習筆記

正常情況下進行檔案讀取,需要以下流程。

轉換流|學習筆記

而緩存就是如果用位元組流讀取,并不表示整個過程中沒有記憶體。在嚴格意義上來講,記憶體将一直存在。

隻要程式需要讀取資料,那麼記憶體就會一直存在。如果用位元組流讀取,流程如下。

轉換流|學習筆記

如果用字元流讀取,還是向 cpu 請求。但是當讀資料的時候,會準備緩沖區。适合傳輸的資料都是位元組資料。

Cpu 請求到的資料是位元組資料,而整個流程中磁盤傳的是位元組資料,而有了緩存之後相當于所有的資料已經經過處理。

意味着這些資料要讀取到緩存區之中,讀取到緩存區中直接過程就在于會對資料進行先期處理。在處理過程中就極為友善進行中文資料。

在電腦中,檔案都是二進制資料的集合,緩沖區會進行處理。轉換流的處理在定義結構上更加清楚描述出所有讀取到的位元組資料,并要求進行轉換處理。

這就是轉換流存在的意義所在。