Исключение нехватки памяти при извлечении метаданных xmp из изображения

У меня проблема, как упоминалось выше, при извлечении метаданных из файла tif. Он имеет размер более 450 МБ. Я извлекал с помощью библиотеки http://commons.apache.org/sanselan/ в новейшей версии (0.97 ). Когда я выполняю код:


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 моей виртуальной машины, и это также не удалось, но, в конце концов, я не заинтересован в увеличении этих свойств, потому что я могу получить более тяжелые изображения для анализа. Буду признателен за помощь в этом вопросе или ссылку на другую библиотеку для разбора метаданных xmp из файлов JPEG/Tif.


person JohnyB    schedule 21.03.2011    source источник
comment
вы просто хотите выдавить метаданные? Или вам нужно будет разобрать весь файл? Если второе, вам придется увеличить память, и вы не сможете ее обойти. В более раннем случае есть решение, я поищу его позже и опубликую как ответ.   -  person Angelo Fuchs    schedule 24.10.2011
comment
Вы решили эту проблему? Я работаю над небольшим домашним проектом, и меня беспокоит то же самое, учитывая, что Sanselan getXmpXml просто возвращает Xmp XML в виде большой строки. при МИНИМУМЕ он в конечном итоге будет использовать тот же объем пространства, который Xmp XML занимает в изображении. Я бы предпочел, чтобы Санселан вернул мне поток, который я мог бы разобрать...   -  person Randyaa    schedule 23.03.2012


Ответы (1)


Ну, вы можете вызвать java с большим объемом кучи, позвонив

java -Xmx512M FooProgramm

Это запустит java с 512 МБ пространства в куче. Я знаю, что это не очень хорошее решение.

Может быть, вы могли бы попробовать что-то из этих примеров:

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

person Jonny Schubert    schedule 22.12.2011