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