搜索字符串'4914904'存在于流的尾部。
这是代码
Scanner sc = new Scanner(xmlInputStream, "UTF-8");
if(sc.findWithinHorizon('4914904', 0) != null) { // <--- exception is thrown here
}
任何建议都将受到高度赞赏。
答案 0 :(得分:1)
如果您阅读扫描仪的API,您会看到如果您将参数0传递给findWithinHorizon,它将立即读取整个缓冲区。
由于你没有对这个值做任何事情,我看到了几个选项。
尝试更改为useDelimiter(String pattern),然后调用if(sc.hasNext())
,这可能有助于内存占用。
如果您有XML,请使用XML解析器而不是文本扫描程序。
您可以考虑编写一个自定义方法,一次解析一行输入流并执行搜索。这样你就不必阅读完整的缓冲区了。
增加jvm启动时给jvm的内存-Xmx256m
旁注:请勿在此处发布时重新编写代码。只需复制并粘贴。
答案 1 :(得分:0)
启动Java时使用-Xmx256m
,它将为JVM提供更多的堆空间。
如果您正在处理XML,您可能还需要考虑使用XML解析库而不是Scanner。像SAX或StAX这样的流媒体API是大输入的最佳选择。