1. 程式人生 > >系統學習 Java IO (九)----緩衝流 BufferedInputStream/BufferedOutputStream

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

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

BufferedInputStream

BufferedInputStream 類為輸入流提供緩衝。 緩衝可以加快IO的速度。 BufferedInputStream 不是一次從網路或磁碟讀取一個位元組,而是一次將更大的塊讀入內部緩衝區。 當從 BufferedInputStream 讀取一個位元組時,您正在從其內部緩衝區中讀取它。 當緩衝區被完全讀取時,BufferedInputStream 將另一個更大的資料塊讀入緩衝區。 這通常比從 InputStream 一次讀取單個位元組快得多,特別是對於磁碟訪問和更大的資料量。

構造器
  1. BufferedInputStream(InputStream in) :
    建立一個 BufferedInputStream 並儲存其引數,即輸入流 in,以便將來使用。
  2. 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也是愚蠢的。

即使你的磁碟讀取例如塊 一次4KB,使用大於此的緩衝區仍然是個好主意。 磁碟擅長順序讀取資料 - 這意味著它擅長讀取位於彼此之後的多個塊。 因此,使用帶有 BufferedInputStream 的 16KB 緩衝區或 64KB 緩衝區(甚至更大)仍然可以提供比僅使用 4KB 緩衝區更好的效能。

BufferedOutputStream

BufferedOutputStream 類為輸出流提供緩衝。 緩衝可以加快 IO 的速度。 您不是一次向網路或磁碟寫入一個位元組,而是一次寫入一個更大的塊。 這通常要快得多,特別是對於磁碟訪問和更大的資料量。

構造器

參考 BufferedInputStream

和 BufferedInputStream 差不多,除了為輸入流新增緩衝外,BufferedOutputStream 的行為與 OutputStream 完全相同。 唯一的區別是,如果您需要絕對確定到目前為止寫入的資料是從緩衝區刷出並進入網路或磁碟,則可能需要呼叫 flush()方法。

BufferedOutputStream的最佳緩衝區大小

參考 BufferedInputStream ;