今天終于完成了自己的日志庫核心的幾個(gè)類和算法,折騰了許久,感覺安全性很好,一些多線程的死鎖問題已經(jīng)逐個(gè)排除了。由于需要跟C++標(biāo)準(zhǔn)庫的輸入輸出流共事,所以么總算自認(rèn)為理解了C++標(biāo)準(zhǔn)流的一些特性,記下來以供備忘。
首先是文件流,關(guān)于該流的問題,要扯就扯遠(yuǎn)了,主要說一說std::wofstream的問題。不要被這個(gè)w騙了,其實(shí)它輸出到文件上的依然還是那么回事,沒有絲毫的變化。如果你是想輸出Unicode到文本文件中,那么你最好是用ios::binary模式,然后一股腦的倒入文件中,如果要是使用<<重載符號(hào)的話,輸出到文件中的跟std::ofstream沒區(qū)別,而且中文還無法輸出。如果你遇見中文無法輸出的問題,恩,可以調(diào)用std::wofstream::imbue()方法,具體也就是一行:ofs.imbue(std::locale("chs"));搞定。
我想,C++標(biāo)準(zhǔn)庫并不支持Unicode編碼,而是給字符地域化的編碼方式,中文的可能也就是GBK吧,聽說C++0x標(biāo)準(zhǔn)會(huì)納入U(xiǎn)nicode編碼支持,如果是這樣的話就省心多了。
然后還有個(gè)不省心的地方就是流的streambuf中的緩沖大小了,我發(fā)現(xiàn),fstream中的寫緩沖居然一直是0啊,這個(gè)就很頭疼了,需要給文件流指定緩沖的大小。