Я пытаюсь создать PDImageXObject из огромного файла JPEG (20 000 x 20 000 пикселей [24-битный цвет])
Методы:
Создает ByteArrayInputStream
объект и выделяет более чем1 ГБ ОЗУ, что вызывает исключение
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 (...) , но у них есть та же проблема
Есть ли способ создать PDImageXObject из InputStream (например, из FileInputStream), не создавая BufferedImage или байтовые массивы?