2011-03-21 69 views
2

從tif文件中提取元數據時,遇到類似上面提到的問題。它的大小超過450 MB。我使用最新版本(0.97)中的http://commons.apache.org/sanselan/庫進行解壓縮。當我執行代碼:當從圖片中提取xmp元數據時出現內存不足異常

 

String xmpMeta = null; 
try { 
    xmpMeta = Sanselan.getXmpXml(file); 
} catch ... 
 

,我獲得以下堆棧跟蹤:

 

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space 
     at org.apache.sanselan.common.byteSources.ByteSourceInputStream.readBlock(ByteSourceInputStream.java:65) 
     at org.apache.sanselan.common.byteSources.ByteSourceInputStream.access$000(ByteSourceInputStream.java:24) 
     at org.apache.sanselan.common.byteSources.ByteSourceInputStream$CacheBlock.getNext(ByteSourceInputStream.java:54) 
     at org.apache.sanselan.common.byteSources.ByteSourceInputStream$CacheReadingInputStream.read(ByteSourceInputStream.java:147) 
... 
 

我不得不承認,我是越來越-Xms和我的虛擬機的XMX特性,它也失敗了,但在最後我不想增加這個屬性,因爲我可以得到更重的圖片來解析。我很感謝在這個問題上的幫助,或者引用另一個庫來解析來自JPEG/Tif文件的xmp元數據。

+0

你只是想擠出元數據?或者你需要解析整個文件?如果第二個,你將不得不增加你的記憶力,並且不能規避它。在之前的案例中,有一個解決方案,我稍後會搜索它,然後將其作爲答案發布。 – 2011-10-24 10:31:32

+0

你解決了這個問題嗎?我正在開發一個小型的項目,我擔心Sanselan getXmpXml只是將Xmp XML作爲一個大字符串返回。在MINIMUM中,它最終將使用Xmp XML在圖像中佔用的相同數量的空間。我更喜歡桑塞蘭吐我回來一個我可以解析的流... – Randyaa 2012-03-23 03:44:34

回答

0

那麼你可以通過調用

java -Xmx512M FooProgramm 

這將運行java,擁有512M堆空間調用具有更多的堆空間的Java。我知道這不是一個好的解決方案。

也許你可以嘗試一些出這樣的例子:

http://www.example-code.com/java/java-xmp-extract.asp