转换为字符串(即.toString())是否会消耗大量内存甚至导致内存泄漏?如果是,那么还有什么方法可以解决这个问题吗?我想当我将pdf文本解析为简单文本时,我的程序消耗了大量内存,不知道这是不是原因。
PS:我使用itext来解析pdf
答案 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在这里: