SAX解析器有這個方法SAX解析器:public void characters(char ch [],int start,int length)。值「啓動」增量太多
characters(char ch[], int start, int length)
這對我瞭解獲取標籤內的字符串。我意識到,隨着SAX解析器繼續在大型XML文件上運行,int start變得越來越大,因此超過了max int值。
我做了一個打印出開始它似乎隨機跳數。數字如何確定?
謝謝
SAX解析器有這個方法SAX解析器:public void characters(char ch [],int start,int length)。值「啓動」增量太多
characters(char ch[], int start, int length)
這對我瞭解獲取標籤內的字符串。我意識到,隨着SAX解析器繼續在大型XML文件上運行,int start變得越來越大,因此超過了max int值。
我做了一個打印出開始它似乎隨機跳數。數字如何確定?
謝謝
通常一個SAX解析器將一次讀取數據緩衝區。在給定的點,一個緩衝區可能包含這樣的
="a" foo="bar"><b x="1">some text</b></a><c
現在,當分析器報告在這個緩衝區中的文本節點,它可能使打電話給你ContentHander,提供包含整個的這一個char []數組緩衝區,開始= 24長度= 9。或者如果它更喜歡,它可能會提供與一系列調用相同的數據。如果文本節點恰好跨越兩個緩衝器是這樣的:
="a" foo="bar"><b x="1">some
text</b></a>
則第一呼叫可能與開始供給第一緩衝液= 24長度= 4,並且所述第二呼叫將提供與啓動所述第二緩衝液= 0長度= 5。
這個想法是,解析器不需要承擔將數據移出原始緩衝區並將其組裝成連續字符串的代價。理論上這給了一個性能上的好處;實際上,大多數SAX應用程序都希望將文本節點的內容收集到一個連續的字符串中,因此複製成本只會移到應用程序中。
真的,你不應該關心開始和長度的值是什麼,或者這些邊界之外的char []數組是什麼。只需將這些邊界內的數據複製到StringBuilder即可。
你能否提供語言和圖書館的詳細資料?這可能是特定實現中的一個錯誤。 –
產生問題的xml的鏈接也很有用。在快速實驗中,我沒有看到MacOS上的Java 1.6.0_51中的標準庫出現這種情況。 –
_「如此之多以至於超過了最大整數值」_--當然,這是不可能的。你能證明一些證據嗎? –