系統學習 Java IO (九)----緩衝流 BufferedInputStream/BufferedOutputStream

目錄:系統學習 Java IO---- 目錄,概覽html

BufferedInputStream

BufferedInputStream 類爲輸入流提供緩衝。 緩衝能夠加快IO的速度。 BufferedInputStream 不是一次從網絡或磁盤讀取一個字節,而是一次將更大的塊讀入內部緩衝區。 當從 BufferedInputStream 讀取一個字節時,您正在從其內部緩衝區中讀取它。 當緩衝區被徹底讀取時,BufferedInputStream 將另外一個更大的數據塊讀入緩衝區。 這一般比從 InputStream 一次讀取單個字節快得多,特別是對於磁盤訪問和更大的數據量。java

構造器
  • BufferedInputStream(InputStream in) : 建立一個 BufferedInputStream 並保存其參數,即輸入流 in,以便未來使用。
  • BufferedInputStream(InputStream in, int size) : 建立具備指定緩衝區大小的 BufferedInputStream 並保存其參數,即輸入流 in,以便未來使用。

例子:網絡

InputStream input1 = new BufferedInputStream(new FileInputStream("D:\\test.txt"));

int bufferSize = 8 * 1024;
InputStream input2 = new BufferedInputStream(new FileInputStream("D:\\test.txt"), bufferSize);

最好使用 1024 字節倍數的緩衝區大小,最適合硬盤中的大多數內置緩衝等。
除了爲輸入流添加緩衝外,BufferedInputStream 的行爲與 InputStream 徹底相同,也支持 mark() 和 reset(); 具體請參考 InputStream ,不贅述了;性能

BufferedInputStream 的最佳緩衝區大小

應該使用不一樣的緩衝區大小進行一些實驗,以找出哪些緩衝區大小彷佛能夠在你的具體硬件上提供最佳性能。 最佳緩衝區大小可能取決因而否將 BufferedInputStream 與磁盤或網絡 InputStream 一塊兒使用。學習

對於磁盤和網絡流,最佳緩衝區大小也可能取決於計算機中的具體硬件。 若是硬盤一次至少讀取 4KB,那麼使用少於 4KB 的緩衝區是愚蠢的。 而後最好使用 4KB 倍數的緩衝區大小。 例如,使用 6KB 也是愚蠢的。code

即便你的磁盤讀取例如塊 一次 4KB ,使用大於此的緩衝區仍然是個好主意。 磁盤擅長順序讀取數據 - 這意味着它擅長讀取位於彼此以後的多個塊。 所以,使用帶有 BufferedInputStream 的 16KB 緩衝區或 64KB 緩衝區(甚至更大)仍然能夠提供比僅使用 4KB 緩衝區更好的性能。htm

BufferedOutputStream

BufferedOutputStream 類爲輸出流提供緩衝。 緩衝能夠加快 IO 的速度。 您不是一次向網絡或磁盤寫入一個字節,而是一次寫入一個更大的塊。 這一般要快得多,特別是對於磁盤訪問和更大的數據量。blog

構造器

參考 BufferedInputStreamget

和 BufferedInputStream 差很少,除了爲輸入流添加緩衝外,BufferedOutputStream 的行爲與 OutputStream 徹底相同。 惟一的區別是,若是您須要絕對肯定到目前爲止寫入的數據是從緩衝區刷出並進入網絡或磁盤,則可能須要調用 flush()方法。input

BufferedOutputStream的最佳緩衝區大小

參考 BufferedInputStream ;

相關文章
相關標籤/搜索