2012-01-03 179 views
-1

是否转换为字符串(即.toString())会消耗大量内存,甚至会导致内存泄漏?如果yes.then是否有任何方法来处理?我想当我解析PDF文本到简单的文本我的程序消耗大量的内存,不知道这是否是原因。内存泄漏使用toString()

PS:我利用iText来解析PDF

+1

定义“大量的内存”。 – 2012-01-03 12:59:00

+0

大量的内存在内存泄漏可能是 – Rookie 2012-01-03 12:59:35

+0

当您调用System.gc()会发生什么?它释放内存吗?如果你再次调用你的方法,然后再次调用System.gc()会怎么样? – 2012-01-03 13:01:39

回答

2

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

UPDATE:

在谷歌上搜索,我发现,你可以使用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/

+0

我不认为itext库允许这个程序 – Rookie 2012-01-03 13:04:26

+1

@raghav我从来没有尝试过使用itext,但当然你可以使用普通的java操作来拆分pdf。 – 2012-01-03 13:13:50

+0

你能举个例子吗? – Rookie 2012-01-03 13:14:39

1

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

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