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

Dav*_*son 2 json saxparser poco-libraries

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

Parser parser;
DefaultHandler handler;
parser.setHandler(&handler);
parser.parse(input);
Run Code Online (Sandbox Code Playgroud)

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

Ale*_*lex 5

std :: string version只是一个代表你创建流的包装器,所以最后总数大致相同,字符串对用户来说更方便.

[编辑]

这已针对1.5.2进行了更改 - 已删除包装,因此现在两个(流和字符串)版本都会重复.的基准实施例可用于确定有多少是流比串慢.

[/编辑]

请注意1.5.2 中会有一些重大更改 - DefaultHandler名称已被删除,内部处理程序已转换为自动创建的智能指针(这是我们不得不废弃DefaultHandler的主要原因,因此现有代码不会传递堆栈创建的处理程序对于智能指针,它不是一个好的设计开始).因此,在1.5.2中,默认解析不再需要显式处理程序创建:

std::string json = "{ \"test\" : null }";
Parser parser;
Var result = parser.parse(json);
Run Code Online (Sandbox Code Playgroud)

如果你关心性能,还要注意Poco :: JSON解析器的速度,就像它现在一样,很差,我们将使用Poco :: Web :: JSON中非常快的解析器或更快的东西(如果我们能找到的话) /写下来).底线,1.5.x仍然是WIP

希望这可以帮助.

编辑:

Windows和Mac上的基准测试(约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]