使用字符串或流解析之间的区别(Poco c ++)

时间:2013-04-06 14:02:42

标签: json saxparser poco-libraries

我编写了一个简单的分层json-parser,使用POCO JSON,用作sax解析器。 如果我使用字符串或流作为parse方法的输入,请参阅下面的调用,或者是不同的构造函数等效,它们在结果中是否存在差异?

Parser parser;
DefaultHandler handler;
parser.setHandler(&handler);
parser.parse(input);

在内存消耗,速度等方面?

1 个答案:

答案 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]