今天终于完成了自己的日志库核心的几个类和算法,折腾了许久,感觉安全性很好,一些多线程的死锁问题已经逐个排除了。由于需要跟C++标准库的输入输出流共事,所以么总算自认为理解了C++标准流的一些特性,记下来以供备忘。
首先是文件流,关于该流的问题,要扯就扯远了,主要说一说std::wofstream的问题。不要被这个w骗了,其实它输出到文件上的依然还是那么回事,没有丝毫的变化。如果你是想输出Unicode到文本文件中,那么你最好是用ios::binary模式,然后一股脑的倒入文件中,如果要是使用<<重载符号的话,输出到文件中的跟std::ofstream没区别,而且中文还无法输出。如果你遇见中文无法输出的问题,恩,可以调用std::wofstream::imbue()方法,具体也就是一行:ofs.imbue(std::locale("chs"));搞定。
我想,C++标准库并不支持Unicode编码,而是给字符地域化的编码方式,中文的可能也就是GBK吧,听说C++0x标准会纳入Unicode编码支持,如果是这样的话就省心多了。
然后还有个不省心的地方就是流的streambuf中的缓冲大小了,我发现,fstream中的写缓冲居然一直是0啊,这个就很头疼了,需要给文件流指定缓冲的大小。