大家用 htmlparser提取文本内容时 有没有出现内存溢出呀

发布于 2021-11-11 18:56:03 字数 1130 浏览 979 评论 4

   public static String getDocument(File html) {  
        String htmlPath = html.getAbsolutePath();  
        String text = "";  
        Parser parser = null;  
        try {  
            parser = new Parser(htmlPath);  
        } catch (ParserException e) {  
            e.printStackTrace();  
        }  
       try {  
           parser.setEncoding("UTF-8");  
           // parser.setEncoding("gbk");  
       } catch (ParserException e) {  
           e.printStackTrace();  
       }  
       HtmlPage visitor = new HtmlPage(parser);  
       try {  
           parser.visitAllNodesWith(visitor);  
       } catch (ParserException e) {  
           e.printStackTrace();  
       }  
       NodeList nodes = visitor.getBody();  
       int size = nodes.size();  
       for (int i = 0; i < size; i++) {  
           Node node = nodes.elementAt(i);  
           text += node.toPlainTextString();  
       }  
       return text;  
   }  
我在循环读取HTML文件中的文本内容时 大概到1000+个文件以后
每个HTML文件大小是1M
parser.visitAllNodesWith(visitor);这行会内存溢出
不知道大家有碰到没? 或者给点解决的思路吧?
TOMCAT的内存已经一个G拉

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

清欢 2021-11-15 20:37:31

谢谢2位的回答

我都试试

小情绪 2021-11-15 17:53:16

别用这东西了,用jsoup吧,简单方便

柒夜笙歌凉 2021-11-14 07:44:54

我认为可能的解决方案有:

第一、

不用String,改为用StringBuffer试试。

第二、

调大Java VM的内存,不过当读取的内容增大到一定程度还会发生同样的问题。

第三、

可以采用分段读取或者读一段存一段(比如存到硬盘中),有点类似操作系统中的缓存(缓存大小有限度,当满了则全部写入,再读)。

不知道能否解决你的问题~

终止放荡 2021-11-12 00:55:55

完整异常信息如下:

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    at org.htmlparser.lexer.Stream.fill(Stream.java:162)
    at org.htmlparser.lexer.Stream.read(Stream.java:266)
    at java.io.InputStream.read(InputStream.java:163)
    at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:264)
    at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:306)
    at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:158)
    at java.io.InputStreamReader.read(InputStreamReader.java:167)
    at org.htmlparser.lexer.InputStreamSource.fill(InputStreamSource.java:345)
    at org.htmlparser.lexer.InputStreamSource.read(InputStreamSource.java:395)
    at org.htmlparser.lexer.Page.getCharacter(Page.java:704)
    at org.htmlparser.lexer.Lexer.parseTag(Lexer.java:1009)
    at org.htmlparser.lexer.Lexer.nextNode(Lexer.java:368)
    at org.htmlparser.scanners.CompositeTagScanner.scan(CompositeTagScanner.java:110)
    at org.htmlparser.util.IteratorImpl.nextNode(IteratorImpl.java:91)
    at org.htmlparser.Parser.visitAllNodesWith(Parser.java:726)
    at ch2.lucenedemo.lucene29.SolrjClient8080.getDocument(SolrjClient8080.java:323)
    at ch2.lucenedemo.lucene29.SolrjClient8080.createIndex(SolrjClient8080.java:243)
    at ch2.lucenedemo.lucene29.SolrjClient8080.main(SolrjClient8080.java:139)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文