我编写了一个简单的分层json-parser,使用POCO JSON,用作sax解析器。 如果我使用字符串或流作为parse方法的输入,请参阅下面的调用,或者是不同的构造函数等效,它们在结果中是否存在差异?
Parser parser;
DefaultHandler handler;
parser.setHandler(&handler);
parser.parse(input);
在内存消耗,速度等方面?
答案 0 :(得分:5)
std :: string version只是一个代表你创建流的wrapper,所以最后总数大致相同,字符串对用户来说更方便。
[编辑]
1.5.2已更改 - 已删除包装,因此现在两个(流和字符串)版本都会重复。 Benchmark Example可用于确定流比字符串慢多少。
[/编辑]
请注意1.5.2中有一些breaking changes - 删除了DefaultHandler名称,并且内部处理程序已经变成自动创建的智能指针(这是我们必须废弃DefaultHandler的主要原因,因此现有代码将不将堆栈创建的处理程序传递给智能指针,这不是一个好的设计开始)。因此,在1.5.2中,默认解析不再需要显式处理程序创建:
std::string json = "{ \"test\" : null }";
Parser parser;
Var result = parser.parse(json);
如果您关注性能,请注意Poco :: JSON解析器速度,现在很差,我们将使用very fast中的Poco::Web::JSON解析器或更快的速度(如果我们能找到/写它)。底线,1.5.x仍然是W.I.P。
希望这有帮助。
编辑:
Windows和Mac上的Benchmarks(约15MB JSON文件):
<强>窗强>
Poco :: JSON:1 195 313 [us]
Poco :: Web :: JSON:403 320 [us]
json-parser:321 289 [us]
libjson:610 352 [us]
MAC(铿锵)
Poco :: JSON:480 965 [us]
Poco :: Web :: JSON:176 297 [us]
json-parser:220 172 [us]