十年網站開發(fā)經驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網站問題一站解決
接著上篇文章,我們繼續(xù)來學習 Java 中的字節(jié)流操作。
裝飾者緩沖流 BufferedInput/OutputStream
裝飾者流其實是基于一種設計模式「裝飾者模式」而實現(xiàn)的一種文件 IO 流,而我們的緩沖流只是其中的一種,我們一起來看看。
在這之前,我們使用的文件讀寫流 FileInputStream 和 FileOutputStream 都是一個字節(jié)一個字節(jié)的從磁盤讀取或寫入,非常耗時。
而我們的緩沖流可以預先從磁盤一次性讀出指定容量的字節(jié)數到內存中,之后的讀取操作將直接從內存中讀取,提高效率。下面我們一起看看緩沖流的具體實現(xiàn)情況:
依然先以 BufferedInputStream 為例,我們簡單提一下它的幾個核心屬性:
buf 就是用于緩沖讀的字節(jié)數組,它的值將隨著流的讀取而不停的被填充,繼而后續(xù)的讀操作可以直接基于這個緩沖數組。
DEFAULT_BUFFER_SIZE 規(guī)定了默認緩沖區(qū)的大小,即 buf 的數組長度。MAX_BUFFER_SIZE 指明了緩沖區(qū)的上限。
count 指向緩沖數組中最后一個有效字節(jié)索引后一位。pos 指向下一個待讀取的字節(jié)索引位置。
markpos 和 marklimit 用于重復讀操作。
接著我們看看 BufferedInputStream 的幾個示例構造器:
public BufferedInputStream(InputStream in) { this(in, DEFAULT_BUFFER_SIZE); }