流分輸入流和輸出流,其基本操作分別是讀取和寫入。
流分字節流和字符流,其操作數據分別是字節和字符。
字節流的基類:InputStream,OutputStream。
字符流的基類:Reader,Writer。
流分源頭流和非源頭流(嵌套流),其區別在於該流是否可以獨立使用,源頭流是可以獨立使用的流,而非源頭流是需要有源頭流才能使用。下圖表示出了有那些源頭流。
如何認識這些流,個人覺得分六個方面認識:源頭所需,性能優化,操作強化,數據過濾,多源控制,狀態記錄。
因源頭所需而存在的流有:
性能優化的流主要是緩存,擁有緩存的流有:
操作強化是指在基本操作的基礎上,增加了可以直接讀取或寫入實際數據的類型,擁有操作強化的流有:
數據過濾是指數據從一端流向另一端的過程中進行轉換,統計,添加,刪減,裝飾等操作,數據過濾的流有:
多源控制是指流不止一個數據源,一般多源是輸入流才有這樣的需求,擁有多源的流有:
流的基類裡都帶有狀態記錄所需的方法,分別是:markSupported,mark和reset。但並不是所有流都支持狀態記錄,markSupported返回布爾值就是告訴操作者,該流是否支持狀態記錄。
一般擁有緩存的流都支持狀態記錄,而部份非源頭流是否支持是依賴於其源的支持。緩存流會把開始記錄的數據一直存放在緩存裡面,直到緩存數據的長度超出一個數值,這個數值是在調用方法mark時,傳入的一個int數值,超出之後就無法回檔。調用reset方法,就是把狀態回檔,使流從記錄地方開使操作。
Filter + InputStream/OutputStream/Reader/Writer,這個流是提供給用戶自定義流的模板,實現了其狀態記錄的支持是依賴於源。
本文原創!待續更新!