很久不用Java的IO流,把好多的基礎知識都忘了,昨天在寫一段代碼,發現好多細節都忘了。那天在組織組內代碼評審的時候,發現有人在亂用IO流相關的類,因此仍是寫篇文章,把這個知識點總結一下。數組
對於Java這種龐大的體系,咱們要學某一塊知識點,只有從總體上把握,總體上造成一個知識架構,這樣才能更好的把握學習內容和學習方向。因此呢,和別的博文同樣,上來就先來一張別的博客貼來的類結構圖。架構
你們先不要被這張圖中那麼多的類所迷惑了;其實,從這張圖來看,結構仍是很是清晰的,也是很是簡單的。雖然類不少,可是咱們經常使用的也就那麼幾個,熟悉了整個的調用流程,咱們就能夠玩的很開心的。下面,我把咱們經常使用的那幾個整理出來,以下圖所示:函數
從咱們常常使用的角度來講,IO流分爲字符流和字節流,下面就分別從字符流和字節流展開說明和總結。學習
字節流是指在傳輸過程當中,傳輸數據的最基本單位是字節的流。編碼
字節輸入流
字節輸入流的的抽象基類是InputStream
,咱們最經常使用的子類是FileInputStream
和BufferedInputStream
這兩個類。3d
FileInputStream
被稱爲文件字節輸入流,意思指對文件數據以字節的形式進行讀取操做,如讀取圖片視頻等;這種咱們常常在讀取文件時會用到。code
BufferedInputStream
是字節輸入緩衝流,在BufferedInputStream
的使用過程當中,會常常結合一些其它的流一塊兒使用,好比咱們看BufferedInputStream
的構造函數:視頻
BufferedInputStream(InputStream in)
BufferedInputStream
本質上是經過一個內部緩衝區數組實現的。例如,在新建某輸入流對應的BufferedInputStream
後,當咱們經過read()
讀取輸入流的數據時,BufferedInputStream
會將該輸入流的數據分批的填入到緩衝區中。每當緩衝區中的數據被讀完以後,輸入流會再次填充數據緩衝區;如此反覆,直到咱們讀完輸入流數據位置。經過BufferedInputStream
,咱們能夠提升字節流的讀取和處理速度。blog
字節輸出流
字節輸出流的抽象基類是OutputStream
,咱們最經常使用的子類是FileOutputStream
和BufferedOutputStream
這兩個類。圖片
關於字節輸出流這兩個經常使用類就不細說了,和上面的字節輸入流同樣。
字符流是指在傳輸過程當中,傳輸數據的最基本單位是字符的流。
字符輸入流
字符輸入流的抽象基類是Reader
,咱們最經常使用的子類是BufferedReader
和FileReader
這兩個類。用法很少說了。
字符輸出流
字符輸出流的抽象基類是Writer
,咱們最經常使用的子類是BufferedWriter
和FileWriter
這兩個類。用法也很少說了。
爲啥用法很少說呢?由於明白了整個的類結構,接下來的使用也就是API的使用,咱們在使用過程當中須要重點關注一下編碼的問題就OK了。
一篇簡單的總結,連代碼示例都木有!但願對你們有那麼一點點的幫助!
2019年7月28日 於內蒙古呼和浩特。