[英]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.