在配合rapidjson使用时,getDataFromFile有时返回的结果不太一样。
如果这样写:
auto data = FileUtils::getInstance()->getDataFromFile(filename);
rapidjson::Document doc;
doc.Parserapidjson::kParseDefaultFlags((const char*)data.getBytes());
有很大几率出错,因为最后一个字节可能不是0结尾,导致rapidjson解析错误。
注意:这里是有几率出现问题,不是总是出现问题,这是最可怕的。
这样写
auto data = FileUtils::getInstance()->getStringFromFile(filename);
rapidjson::Document doc;
doc.Parserapidjson::kParseDefaultFlags(data.c_str());
由于getStringFromFile创建了一个string对象,这样避免了这个问题。
仔细看来下代码,getDataFromFile调用的getData有两个参数,第二个参数决定是否使用string的方式读取。而getDataFromFile使用的是false(不使用string的方式读取)
static Data getData(const std::string& filename, bool forString)
使用API的还是要小心,由于没有仔细阅读getDataFromFile的API就贸然使用还是很危险的。