[英]java.util.Scanner#findWithHorizon throws OutOfMemory exception on 32Mb input stream
搜索字符串“4914904”存在於 stream 的尾部。
這是代碼
Scanner sc = new Scanner(xmlInputStream, "UTF-8");
if(sc.findWithinHorizon('4914904', 0) != null) { // <--- exception is thrown here
}
任何建議將不勝感激。
如果您閱讀 Scanner 的 API,您會看到如果您將參數 0 傳遞給findWithinHorizo n,它將立即讀取整個緩沖區。
由於您沒有對由此產生的價值做任何事情,因此我看到了一些選擇。
嘗試更改為useDelimiter(String pattern)然后調用if(sc.hasNext())
這可能有助於 memory 足跡。
如果您有 XML,請使用 XML 解析器而不是文本掃描儀。
您可以考慮編寫一個自定義方法,一次解析輸入 stream 並執行搜索。 這樣您就不必讀取完整的緩沖區。
增加 memory 你給的 jvm 啟動時-Xmx256m
附帶說明:在此處發布時不要重新編寫代碼。 只需復制和粘貼。
啟動 Java 時使用-Xmx256m
,它會給 JVM 更多的堆空間。
如果您正在處理 XML,您可能還需要考慮使用 XML 解析庫而不是 Scanner。 像 SAX 或 StAX 這樣的流式 API 是大輸入的最佳選擇。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.