Java 輸入/輸出(IO)的性能可以使用標準的緩沖類提升,就像操作系統(tǒng)通過緩沖請求提高它的速度一樣。例如,如果一段代碼要求從磁盤上讀取數(shù)據(jù),它會試圖讀取內(nèi)存中已有的數(shù)據(jù);如果代碼希望向磁盤寫一些東西,它可能在完成寫操作前將輸出在內(nèi)存中存放一段時間以等待更多的數(shù)據(jù)。
在Java的IO系統(tǒng)中,將一個字符寫入內(nèi)存比寫到磁盤上快得多,例如:
// 這段代碼會拋出 IOException
Writer writer = new FileWriter( new File( "file.txt" ) );
for(int i=0; i<1000; i++) {
writer.write(""+i);
writer.write("\n");
}
writer.close( );
在這個范例代碼中,F(xiàn)ileWriter 一次輸出一個數(shù)字,在Apple Powerbook 上測量消耗的時間,第一次是180毫秒,以后是90毫秒,這個不同可能是JVM的即時(just-in-time)編譯導(dǎo)致的。
給這段代碼添加緩沖功能就是在FileWriter上創(chuàng)建一個BufferedWriter 對象。
//這段代碼會拋出IOException
Writer writer = new BufferedWriter(new FileWriter(
new File( "file.txt" )
) );
for(int i=0; i<1000; i++) {
writer.write(""+i);
writer.write("\n");
}
writer.close( );
現(xiàn)在BufferedWriter 會決定以什么頻率向FileWriter發(fā)送寫調(diào)用。可以使用flush( )方法強制發(fā)出寫調(diào)用。增加了BufferedWriter 后,代碼的運行時間是63毫秒。如果是有很多小量的輸出,那么BufferedWriter 在缺省條件下的性能提升是非常顯著的。
除了BufferedWriter 外,BufferedOutputStream 也具有相同的品質(zhì),對于輸入就是BufferedReader 和BufferedInputStream。
需要注意的是緩沖類不光是在文件系統(tǒng)上起作用,任何的Reader/Writer都能進行緩沖以提高字符輸入/輸出的速度,同樣任何OutputStream/InputStream都能進行緩沖以提高字節(jié)IO的速度。
在Java的IO系統(tǒng)中,將一個字符寫入內(nèi)存比寫到磁盤上快得多,例如:
// 這段代碼會拋出 IOException
Writer writer = new FileWriter( new File( "file.txt" ) );
for(int i=0; i<1000; i++) {
writer.write(""+i);
writer.write("\n");
}
writer.close( );
在這個范例代碼中,F(xiàn)ileWriter 一次輸出一個數(shù)字,在Apple Powerbook 上測量消耗的時間,第一次是180毫秒,以后是90毫秒,這個不同可能是JVM的即時(just-in-time)編譯導(dǎo)致的。
給這段代碼添加緩沖功能就是在FileWriter上創(chuàng)建一個BufferedWriter 對象。
//這段代碼會拋出IOException
Writer writer = new BufferedWriter(new FileWriter(
new File( "file.txt" )
) );
for(int i=0; i<1000; i++) {
writer.write(""+i);
writer.write("\n");
}
writer.close( );
現(xiàn)在BufferedWriter 會決定以什么頻率向FileWriter發(fā)送寫調(diào)用。可以使用flush( )方法強制發(fā)出寫調(diào)用。增加了BufferedWriter 后,代碼的運行時間是63毫秒。如果是有很多小量的輸出,那么BufferedWriter 在缺省條件下的性能提升是非常顯著的。
除了BufferedWriter 外,BufferedOutputStream 也具有相同的品質(zhì),對于輸入就是BufferedReader 和BufferedInputStream。
需要注意的是緩沖類不光是在文件系統(tǒng)上起作用,任何的Reader/Writer都能進行緩沖以提高字符輸入/輸出的速度,同樣任何OutputStream/InputStream都能進行緩沖以提高字節(jié)IO的速度。
