Java IO 流的相關知識

I-O / Input /Output

IO體系:
流式 : 字符流,字節流
非流式 :File RandomAccessFile
字節流,字符流,處理流(是什麼,有什麼區別)
IO中涉及的設計模式 -> 裝飾器模式,適配器模式
*

                              IO體系  
            流式                                     非流式
InputStream outputStream(操作字節)          File     RandomAccessFile
Reader    Writer(操作字符)

數據源:磁盤
遠程服務器:Socket

一 .IO體系:
流:
流的本質:對數據的傳輸,是字節的一個集合,有方向的數據傳輸
流的作用:在數據源和程序之間建立通道

數據源 ----> 程序 (輸入流)
數據源 <— 程序 ( 輸出流)

流的劃分:
1.流按照方向劃分:
Input:輸入流:從數據源/介質(磁盤,遠程服務器,鍵盤,鼠標)到程序的過程
output:輸出流:從程序將數據流向數據源/介質(磁盤,遠程服務器,屏幕)

2.流處理單位劃分:
字節流:二進制(一個字節是8個bit位)例:010101 , (AVI[視頻],音頻等)
字符流:字符形式存儲
字符和字節的區別:(字節相對高效)
基本單位不同:字節是按照字節爲單位讀取(8bit)/ 字符是按照字符單位讀取
處理對象不同:字節流可以處理任意類型對象(視音頻)/ 字符流只能處理字符

3.按照流的角色劃分:
節點流:程序直接連接到實際的數據源,和實際的輸入/輸出節點連接 (低級流)
處理流:對已存在的流進行連接和封裝,通過封裝後的流實現數據的讀,寫功能。(高級流)

字節流(二進制流):
1.二進制數據:將數據解釋成原始的二進制數
2.byte數據:讀/寫均爲字節(byte)數據
3.效率高:二進制數據不需要編碼和解碼,比文本i/o效率高
4.可移植(與主機的編碼方式無關)

字符流:
1.字符數據:字符流將原始數據解釋成字符的序列
2.依賴編碼方式:文本數據存儲依賴文件編碼方式,字符流的輸入和輸出需要進行編碼和解碼

節點流:
(介質流 Media Stream)也叫做(原始流 Ram Stream) 主要指從具體介質上讀取 / 寫入數據的類
節點: 文件,內存緩衝區 (Byte數組,char數組,StringBuffer對象)

過濾流:(處理流)
主要指FilterInputStream/FileOutStream和FilterReader/FilterWriter的子類
過濾流使節點流作爲輸入或者輸出,對其包裝的節點流進行特定的處理

IO的設計模式:
裝飾器模式:
在不改變原有類的使用和繼承上,動態擴展新的功能,創建包裝對象出來,也就是將當前的原有類做裝飾作用。
FileInputStream通過InputStream抽象類裝飾成BufferInputStream ,DataInputStream

適配器模式:
將不合乎期望的類或者接口轉換適配成滿足要求的類或接口。
將BufferInputStream,DataInputStream通過InputStream 適配成FileInputStream

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章