我正在尝试从巨大的JPEG文件(20,000 x 20,000像素[24位颜色])创建PDImageXObject
方法:
- PDImageXObject.createFromByteArray(...),
- PDImageXObject.createFromFile(...)
- PDImageXObject.createFromFileByContent(...)
- PDImageXObject.createFromFileByExtension(...)
这些方法会创建ByteArrayInputStream
对象并分配超过1GB的内存,可能会导致异常。
java.lang.OutOfMemoryError: Java heap space
at java.io.ByteArrayOutputStream.<init>(ByteArrayOutputStream.java:77) ~[?:1.8.0_211]
该行代码出现异常:
buf = new byte[size];
我知道图像处理的字节数 = W * H * color bits \ 9
;
这就是为什么我不想一次性加载所有文件字节。
我尝试将最大堆大小设置为-Xmx2G
,但这还不够。我还尝试使用以下方法:LosslessFactory.createFromImage(...),
JPEGFactory.createFromImage(...) ,但它们都有同样的问题。
是否有方法可以从InputStream(例如从FileInputStream)创建PDImageXObject,而不必创建BufferedImage或字节数组?