2011-11-06 11 views
2

注:這個問題是指Jsoup 1.6.1如何禁用Jsoup Tokeniser中的錯誤跟蹤?

我需要解析使用Jsoup幾份文件,但我已經注意到了一段時間後內存積聚。使用堆轉儲和內存分析器,我已經找到了問題Jsoup的Tokeniser類,存儲ParseErrorArrayList的。在堆轉儲中,存儲了超過500萬個存儲的對象,每個對象爲56個字節。

查看源代碼,我注意到在org.jsoup.parser.Tokeniser可變,其允許誤差跟蹤被關斷。隨着電話的流通,我看不到任何電話關閉它,儘管有一種方法可以這樣做。該類不公開,我不得不修改源代碼並從源代碼構建它。

有沒有一種方法,我可以打電話給我也可以設置爲有效地禁用在Tokeniser錯誤跟蹤,而無需修改源代碼的屬性?

+0

我做修改源代碼,因爲我在生產環境中來的,所以我需要這對儘快工作。我仍然好奇,如果這是可能的而不修改源代碼。 – Wolf

+0

你可以顯示你用來做解析的代碼嗎? –

+0

與http://jsoup.org/cookbook/input/parse-document-from-string相同,但使用不同的數據,當然。 – Wolf

回答

1

原來,問題不是由Jsoup造成的。它試圖解析的文件不是HTML文件,而是圖像。由於Jsoup不打算檢查它是否具有正確的文件類型,並依賴於程序員檢查擺在首位,在這個問題的答案是Jsoup 1.6.1 ,你不能,除非你修改源代碼。關閉Jsoup的Tokeniser類中的錯誤跟蹤確實減少了內存使用並稍微提高了速度(由於未在ArrayList中插入許多元素),但不建議修改源代碼。如果您遇到此問題,請先檢查您自己的代碼。 ;)