2011-06-25 68 views
3

我遇到了兩個不同的代碼,用StAX解析文件。 Google快速告訴我,有兩種解析方式:使用遊標API並使用迭代器API。請告訴我兩者之間的區別,以及從開發人員的角度更易於使用哪一個。StAX Cursor API和Iterator API有什麼區別?

回答

7

你最有可能找到在Java Web服務開發包教程或Java EE 5 tutorial內StAX的API部分答案。他們都包含相同的信息,我下面重現:

光標和迭代器的API

比較光標和 迭代器的API之間進行選擇之前,你應該注意的幾個 東西,你可以做的 迭代器API,你不能用 光標API做的事:從XMLEvent的小號創建

  • 對象ubclass是不可變的,並且可以在數組,列表和地圖中使用 ,並且 可以通過您的 應用程序傳遞,即使在解析器將 移動到後續事件之後也是如此。

  • 您可以創建或者完全 新信息項或 現有項目的擴展,但與另外 方法XMLEvent的亞型。

  • 與使用遊標API相比,您可以使用更爲簡單的 方式添加和刪除XML事件流中的事件。

同樣,記住一些普通 建議做出 您的選擇,當:

  • 如果您正在編寫一個特別內存受限 環境,如J2ME,可以使 小,更高效的代碼與遊標API 。

  • 如果性能是最高優先級 - 例如,創建 低級別的庫或 基礎設施時 - 光標API更 高效。

  • 如果要創建XML處理管道,請使用迭代器 API。

  • 如果要修改事件流,請使用迭代器API。

  • 如果您希望您的應用程序能夠處理事件流的可插入處理 ,請使用迭代器 API。

  • 一般來說,如果你沒有強烈的偏好的一種方式或其他 使用迭代器API是 推薦,因爲它是更 靈活且可擴展,從而 「面向未來的」你的應用程序。

迭代器API雖然推薦的是比光標API慢,當光標並不需要記住它已經被解析以前的節點;它提供了對XML文檔的僅前向解析,並且不具有構建對象的開銷。顯然,a benchmark表明,與StAX相比,SAX可能會更好地解析大型文檔;您可能想驗證您是否可以重現數據集的基準測試結果。

+0

感謝Vineet,這是非常豐富的。 – Anand

+0

關於大型文檔問題的更新。您提供的鏈接來自2011年的結構化文檔處理語言課程。我注意到你的評論是從2011年開始的,但現在是2014年。我沒有做新的基準測試,但仔細查看鏈接上的課程信息,似乎很多性能問題是由於DOCTYPE爲用過的。鑑於3年前已明確瞭解問題,似乎現在已經解決了這個問題。也; StAX Cursor API甚至在當時擁有最佳的整體性能 - 甚至在較大文件大小的情況下保持良好。 –

-1

如果您不解析長XML文件,那麼您可以簡單地使用JDOM,JDOM在內存中加載整個XML並且速度較慢,但​​它非常易於使用。

jdom

+0

@ oscarMk-由於同樣的原因,JDOM不存在問題 - 我使用的文件大小大於200MB ** – Anand

相關問題