從
同一個源文件(15M左右)使用不同的方式讀入,一種是讀入后構(gòu)造成一個String,另外一個是讀入后構(gòu)造成一個List。然后再調(diào)用
writeLines(File, String)和writeLines(File, Collection)寫入。下面是測試比較的結(jié)果:
Read and write by string format
File sizes(bytes): 15661680
Content read(bytes): 15661680
Time costing(ms) on reading: 2047
Time costing(ms) on writing: 1016
Read and write by collection format
File sizes(bytes): 15661680
File read(lines): 1782615
Time costing(ms) on reading: 2047
Time costing(ms) on writing: 533437
效率相差之多! 我的測試環(huán)境如下:
OS:Win XP SP4
CPU:Intel Core(TM) 2 Duo CPU
內(nèi)存:800M(虛擬機分配)
JDK:JDK 5.0 (JVM內(nèi)存分配:-Xms64m -Xmx512m)
測試文件:15.295M (是一個IP地址文件,總共1782615行)
在讀方面時間居然相當(這里面應該有操作系統(tǒng)層面的緩沖作用,我單獨地測試時第2個方式總比第一個慢1/3左右)。而在寫方面性能簡直是天壤之別啊:533437/1016 ≈525倍。
雖然我這個測試還是不嚴謹?shù)模菑姆椒▽崿F(xiàn)過程和原理來看,兩者性能差異存在必然的因素:
①以Collection方式去構(gòu)造的,在讀取的過程中生成多個小String,而生成String是一項耗時的工作
②以Collection方式去寫的,首先要迭代這個Collection,然后每次調(diào)用Collection中的元素的toString()方法,造成多次的堆棧操作
-------------------------------------------------------------
生活就像打牌,不是要抓一手好牌,而是要盡力打好一手爛牌。