我已經使用POCO JSON編寫了一個簡單的分層json解析器,用作sax解析器。 如果我使用字符串或流作爲parse方法的輸入,請參閱下面的調用,或者是不同的構造方法是否等效,它們在結果中的差異是什麼?使用字符串或流解析的區別(Poco C++)
Parser parser;
DefaultHandler handler;
parser.setHandler(&handler);
parser.parse(input);
在內存消耗,速度等方面?
我已經使用POCO JSON編寫了一個簡單的分層json解析器,用作sax解析器。 如果我使用字符串或流作爲parse方法的輸入,請參閱下面的調用,或者是不同的構造方法是否等效,它們在結果中的差異是什麼?使用字符串或流解析的區別(Poco C++)
Parser parser;
DefaultHandler handler;
parser.setHandler(&handler);
parser.parse(input);
在內存消耗,速度等方面?
std :: string版本只是一個代表您創建流的wrapper,所以最後總數將大致相同,字符串對用戶來說更方便。
[編輯]
這改變爲1.5.2 - 除去包裹,使得現在兩者(流和字符串)版本迭代。可以使用Benchmark Example來確定比串流慢多少。
[/編輯]
請注意,有一些breaking changes進來1.5.2 - 移除了DefaultHandler名稱和內部處理程序已經變成了自動創建智能指針(這是我們不得不廢棄的主要原因DefaultHandler所以現有的代碼不會將堆棧創建的處理程序傳遞給智能指針,但這不是一個好的設計)。所以,在1.5.2,明確處理程序的創建將不再需要爲默認解析:
std::string json = "{ \"test\" : null }";
Parser parser;
Var result = parser.parse(json);
如果您關心的性能,還要注意波科:: JSON解析器的速度,因爲目前的情況是,差我們將使用來自Poco::Web::JSON的very fast解析器或更快的東西(如果我們能夠找到/寫入它)。底線,1.5.x仍然是W.I.P.
希望這會有所幫助。
編輯:
Benchmarks在Windows和Mac(〜15MB JSON文件)
的Windows
波科:: JSON:1 195 313 [美]
波科: :Web :: JSON:403 320 [us]
json-parser:321 289 [us]
libjson:610 352 [us]
MAC(鐺)
波索:: JSON:480 965 [US]
波索::網絡:: JSON:176 297 [US]
JSON的解析器:220 172 [我們]
它具有SAX解析器的特點? – 2013-06-12 19:53:41
在1.5.2中,默認處理程序(ParseHandler)的行爲更像DOM(即將整個樹保留在內存中);最終用戶可以輕鬆地提供一個類似SAX的處理程序。 – Alex 2013-06-13 20:26:29