在 JDK API 中,基礎的 IO 類位於 java.io 包,而新實現的 IO 類則分佈在以 java.nio 開頭的包中。本文將重點介紹 java.io 包中的類體系結構。
流具有方向性,根據流的方向可劃分為兩大類:
由於 JDK 歷史原因,java.io 實現了兩類流:
字符流的類結構基本與字節流一一對應,學習時可先從字節流入手。
Sun 為每個系列設計了父類,具體操作類作為子類實現:
所有字節輸入流的父類,定義了統一的讀取方法,簡化編程難度。常見方法:
available():返回未讀取的字節數(不可靠)close():關閉流並釋放資源markSupported()、mark()、reset():標記與重讀機制read() 系列:核心讀取方法,阻塞式讀取單個字節、字節數組或指定長度skip():跳過指定字節數所有字節輸出流的父類,採用緩衝區機制。常見方法:
close():關閉流flush():強制輸出緩衝數據write() 系列:核心寫入方法,支持單字節、字節數組、部分數組寫入字節輸入流的升級版,讀取單位為 char,效率更高。新增方法:
read(CharBuffer):讀入字符緩衝區ready():判斷流是否準備好可讀取字節輸出流的升級版,寫入單位為 char。新增方法:
append() 系列:向流末尾追加字符/字符序列write(String) 系列:直接寫入字符串或其片段根據是否直接連接數據源,IO 類可分為:
實際使用時應根據流類型選擇合適的處理方式。