ifstream是標(biāo)準(zhǔn)C++中的文件輸入流,在實(shí)際應(yīng)用中,用它的read方法,是必須緩沖的,效率很低。
在一次測(cè)試中,用它將一個(gè)800k的文件一次讀入字符串中,和MFC中的CFile類的read方法,效率竟然相差七倍,我用的是VC8,WM5.0的平臺(tái),用CFile,不到一秒,用ifstream要快七秒。究其原因,還是兩者的機(jī)制不同所致。
ifstream的read、write方法,都是要緩沖的,所謂的緩沖區(qū)其實(shí)是一段中介內(nèi)存(臨時(shí)存儲(chǔ)區(qū)),如果用戶不設(shè)定的話,一般是512字節(jié),讀或?qū)憰r(shí)先
要將數(shù)據(jù)輸送到緩沖區(qū),等到緩沖區(qū)滿或被刷新時(shí),才將數(shù)據(jù)傳輸?shù)皆O(shè)備或文件中。要直接讀到內(nèi)存中(即所謂的內(nèi)核格式化),要用istringstream類。CFile顯然是直接讀內(nèi)存不需要緩沖,所以速度快。
如果不考慮效率,可以用標(biāo)準(zhǔn)C++的文件輸出流,二者的區(qū)別文件越大越明顯,所以要根據(jù)實(shí)際運(yùn)用的需要來(lái)選擇。C++的靈活性在于它的概念是在實(shí)際中體會(huì)的,理論也是在實(shí)際應(yīng)用中深化的。