目錄:系統(tǒng)學(xué)習(xí) Java IO---- 目錄绢馍,概覽
BufferedInputStream
BufferedInputStream 類為輸入流提供緩沖领铐。 緩沖可以加快IO的速度乳幸。 BufferedInputStream 不是一次從網(wǎng)絡(luò)或磁盤讀取一個(gè)字節(jié),而是一次將更大的塊讀入內(nèi)部緩沖區(qū)。 當(dāng)從 BufferedInputStream 讀取一個(gè)字節(jié)時(shí),您正在從其內(nèi)部緩沖區(qū)中讀取它砌们。 當(dāng)緩沖區(qū)被完全讀取時(shí),BufferedInputStream 將另一個(gè)更大的數(shù)據(jù)塊讀入緩沖區(qū)搁进。 這通常比從 InputStream 一次讀取單個(gè)字節(jié)快得多浪感,特別是對(duì)于磁盤訪問和更大的數(shù)據(jù)量。
構(gòu)造器
- BufferedInputStream(InputStream in) : 創(chuàng)建一個(gè) BufferedInputStream 并保存其參數(shù)饼问,即輸入流 in影兽,以便將來使用。
- BufferedInputStream(InputStream in, int size) : 創(chuàng)建具有指定緩沖區(qū)大小的 BufferedInputStream 并保存其參數(shù)莱革,即輸入流 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 字節(jié)倍數(shù)的緩沖區(qū)大小盅视,最適合硬盤中的大多數(shù)內(nèi)置緩沖等捐名。
除了為輸入流添加緩沖外,BufferedInputStream 的行為與 InputStream 完全相同,也支持 mark() 和 reset(); 具體請(qǐng)參考 InputStream 闹击,不贅述了桐筏;
BufferedInputStream 的最佳緩沖區(qū)大小
應(yīng)該使用不同的緩沖區(qū)大小進(jìn)行一些實(shí)驗(yàn),以找出哪些緩沖區(qū)大小似乎可以在你的具體硬件上提供最佳性能。 最佳緩沖區(qū)大小可能取決于是否將 BufferedInputStream 與磁盤或網(wǎng)絡(luò) InputStream 一起使用梅忌。
對(duì)于磁盤和網(wǎng)絡(luò)流,最佳緩沖區(qū)大小也可能取決于計(jì)算機(jī)中的具體硬件除破。 如果硬盤一次至少讀取 4KB牧氮,那么使用少于 4KB 的緩沖區(qū)是愚蠢的。 然后最好使用 4KB 倍數(shù)的緩沖區(qū)大小瑰枫。 例如踱葛,使用 6KB 也是愚蠢的。
即使你的磁盤讀取例如塊 一次 4KB 光坝,使用大于此的緩沖區(qū)仍然是個(gè)好主意尸诽。 磁盤擅長順序讀取數(shù)據(jù) - 這意味著它擅長讀取位于彼此之后的多個(gè)塊。 因此盯另,使用帶有 BufferedInputStream 的 16KB 緩沖區(qū)或 64KB 緩沖區(qū)(甚至更大)仍然可以提供比僅使用 4KB 緩沖區(qū)更好的性能性含。
BufferedOutputStream
BufferedOutputStream 類為輸出流提供緩沖。 緩沖可以加快 IO 的速度鸳惯。 您不是一次向網(wǎng)絡(luò)或磁盤寫入一個(gè)字節(jié)商蕴,而是一次寫入一個(gè)更大的塊。 這通常要快得多芝发,特別是對(duì)于磁盤訪問和更大的數(shù)據(jù)量绪商。
構(gòu)造器
參考 BufferedInputStream
和 BufferedInputStream 差不多,除了為輸入流添加緩沖外辅鲸,BufferedOutputStream 的行為與 OutputStream 完全相同格郁。 唯一的區(qū)別是,如果您需要絕對(duì)確定到目前為止寫入的數(shù)據(jù)是從緩沖區(qū)刷出并進(jìn)入網(wǎng)絡(luò)或磁盤独悴,則可能需要調(diào)用 flush()
方法例书。
BufferedOutputStream的最佳緩沖區(qū)大小
參考 BufferedInputStream ;