首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用JAI读取图片的OutOfMemory

使用JAI读取图片的OutOfMemory
EN

Stack Overflow用户
提问于 2012-09-22 00:09:00
回答 3查看 654关注 0票数 1

在某些图像上,当我使用JAI时,我得到了一个OutOfMemory异常。似乎JAI正在尝试分配一个巨大的byte[],可能是由于图像中的一些错误。有什么变通方法吗?如果没有,有没有办法预先检测到错误?下面是一个示例:

代码语言:javascript
复制
URL bad = new URL("http://static4.businessinsider.com/image/505c5461ecad047a3500002b-772-598/share-of-income-to-labor.png");
RenderedOp op = JAI.create("stream", SeekableStream.wrapInputStream(url, true));
op.createInstance();

原因: com.sun.media.jai.codecimpl.PNGImage.readChunk(PNGImageDecoder.java:554) at com.sun.media.jai.codecimpl.PNGImage.(PNGImageDecoder.java:489) at com.sun.media.jai.codecimpl.PNGImageDecoder.decodeAsRenderedImage(PNGImageDecoder.java:81) at com.sun.media.jai.opimage.CodecRIFUtil.create(CodecRIFUtil.java:120) at com.sun.media.jai.opimage.PNGRIF.create的Java堆空间(PNGRIF.java:56) ...还有20多个

EN

回答 3

Stack Overflow用户

发布于 2012-09-22 01:22:50

你使用JAI是因为你被旧的JDK卡住了吗?标准的JDK1.6PNG库没有这个问题,至少在您给出的示例图像中没有这个问题。

例如(在Clojure中,但在JDK 1.6中仍然使用Java API)

代码语言:javascript
复制
wget http://static4.businessinsider.com/image/505c5461ecad047a3500002b-772-598/share-of-income-to-labor.png
...
2012-09-21 13:14:54 (370 KB/s) - `share-of-income-to-labor.png.1' saved [64754/64754]

user=> (.exists (java.io.File. "share-of-income-to-labor.png"))
true

user=> (javax.imageio.ImageIO/read (java.io.File. "share-of-income-to-labor.png"))
javax.imageio.IIOException: Error reading PNG image data (NO_SOURCE_FILE:0)

user=> (System/getProperty "java.version")
"1.6.0_35"
票数 1
EN

Stack Overflow用户

发布于 2012-09-22 00:10:58

您唯一的选择是捕获错误并报告映像已损坏。

票数 0
EN

Stack Overflow用户

发布于 2012-09-22 00:40:27

您可以尝试逐渐增加堆大小。如果错误仍然存在,则可能是由于内存泄漏。看看这个。http://jadroider.blogspot.com/2012/07/java-how-to-change-jvm-memory-settings.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12534169

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档