對於流的概念,感受晦澀難懂,根據我的的理解,整理下,以及一些經常使用的流java
咱們舉個場景,從迅雷的服務器上,下載一部電影,大概的過程是,迅雷硬盤讀取到內存,經過網絡傳輸,到本地電腦內存,再由本地電腦,持久化到本地硬盤,這就是流,之因此叫流,由於像水流同樣,如上圖git
1 按照流的方向而言:輸入流 輸出流api
輸入輸出是相對於內存而言的,從內存中出來的就是輸出流,到內存中的就是輸入流服務器
輸入流又叫作InputStream,輸入也叫作讀 Read 輸出流又叫作OutputStream,輸出也叫寫 Write網絡
這句話很重要,必定是先讀出來在寫,因此輸入流叫讀,輸出流叫寫spa
2 按照讀取數據方式不一樣:字節流 字符流.net
字節流按字節方式讀取 字符流按字符方式讀取(一次兩個字節)日誌
字節流適合讀取:視頻 聲音 圖片 等二進制的文件(微軟的doc文件,不是純文本,包括格式等)視頻
字符流適合讀取:純文本文件對象
java 語言中,全部的字節流都是以Stream結尾 全部的字符流都是以Reader或Writer結尾
java.io.* (重點掌握這16個) FileInputStream ----------------讀取文件 | 字節 | 輸入 FileOutputStream ---------------讀取文件 | 字節 | 輸出 FileReader ---------------------讀取文件 | 字符 | 輸入 FileWriter----------------------讀取文件 | 字符 | 輸出 BufferedInputStream ------------帶有緩衝區 | 字節 | 輸入 BufferedOutputStream------------帶有緩衝區 | 字節 | 輸出 BufferedReader------------------帶有緩衝區| 字符 | 輸入 BufferedWriter------------------帶有緩衝區| 字符 | 輸出 InputStreamReader--------------轉換流(字節流轉換成字符流) OutputStreamWriter-------------轉換流(字節流轉換成字符流) DateInputStream-----------------專門讀取數據 ,連同數據類型一同讀取(兩個一塊兒使用) DateOutputStream----------------專門讀取數據 ,連同數據類型一同寫入(兩個一塊兒使用) ObjectInputStream---------------專門讀取java對象,反序列化 ObjectOutputStream--------------專門讀取java對象,序列化 PrintWriter PrintStream -------------------標準的輸出流(輸出到控制檯),與日誌打印功能密切相關
咱們參考jdk文檔畫出UML類圖 :http://tool.oschina.net/apidocs/apidoc?api=jdk-zh
InputStream OutputStream Reader Writer (java中的流四你們族)
InputStream OutputStream
flush 僅僅針對輸出流,意思是把剩餘的東西一點不剩的輸出,好比一桶水,倒到缸裏,剩下一點,用個刷子,一點不剩的刷進去
Reader Writer
本文參考杜聚賓老師的視頻;
相關代碼已上傳碼雲:https://gitee.com/liuhuxiang/java