2012-01-03 184 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