使用toString()时内存泄漏

时间:2012-01-03 12:57:10

标签: java

转换为字符串(即.toString())是否会消耗大量内存甚至导致内存泄漏?如果是,那么还有什么方法可以解决这个问题吗?我想当我将pdf文本解析为简单文本时,我的程序消耗了大量内存,不知道这是不是原因。

PS:我使用itext来解析pdf

3 个答案:

答案 0 :(得分:2)

如果你有一个大的pdf,那么它确实消耗了大量的内存。我能看到的唯一解决方案是将你的pdf分成较小的,然后在每一个上运行你的操作。最后,重新组合结果

更新:

谷歌搜索时,我发现你可以使用itext库分割pdf,检查这些链接:

http://viralpatel.net/blogs/2009/06/itext-tutorial-merge-split-pdf-files-using-itext-jar.html

http://sanjaal.com/java/448/java-pdf/splitting-pdf-file-using-java-itext-api-into-multiple-pdfs/

答案 1 :(得分:1)

将somethifn转换为字符串通常需要分配新的字符串对象(这会消耗内存)。这是否构成内存泄漏取决于toString()方法的实现。通常没有内存泄漏。

答案 2 :(得分:1)

不要使用itext将pdf转换为字符串。如果您想从pdf中提取文本,请使用apache pdfbox库。 Itext不是为了这个目的,尽管它确实如此。

以下是一些可以帮助您入门的代码..

public static String pdftoText(File file) {
    PDFParser parser=null;
    String parsedText = null;
    PDFTextStripper pdfStripper = null;
    PDDocument pdDoc = null;
    COSDocument cosDoc = null;
    try {
        parser = new PDFParser(new FileInputStream(file));
        parser.parse();
        cosDoc = parser.getDocument();
        pdfStripper = new PDFTextStripper();
        pdDoc = new PDDocument(cosDoc);
        parsedText = pdfStripper.getText(pdDoc);
    } catch (Exception e) {
        // handle exception
    } finally {
        try {
            if (cosDoc != null)
                cosDoc.close();
            if (pdDoc != null)
                pdDoc.close();
        } catch (Exception e) {
            // handle excpetion
        }
    }
    return parsedText;
}  

我不知道它对你的记忆情况会怎样做。尝试一下,看看它是否有帮助。 URL在这里:

http://pdfbox.apache.org/index.html