Я хочу читать изображения в архиве .CBZ и хранить их внутри ArrayList. Я попробовал следующее решение, но у него есть, по крайней мере, 2 проблемы.Чтение изображений из архива .cbz
- я получаю OutOfMemory ошибки после добавления 10-15 изображений в ArrayList
- Там должна быть лучшим способом получения изображений внутри ArrayList вместо того, чтобы писать их на временный файл и читать снова, что.
public class CBZHandler {
final int BUFFER = 2048;
ArrayList<BufferedImage> images = new ArrayList<BufferedImage>();
public void extractCBZ(ZipInputStream tis) throws IOException{
ZipEntry entry;
BufferedOutputStream dest = null;
if(!images.isEmpty())
images.clear();
while((entry = tis.getNextEntry()) != null){
System.out.println("Extracting " + entry.getName());
int count;
FileOutputStream fos = new FileOutputStream("temp");
dest = new BufferedOutputStream(fos,BUFFER);
byte data[] = new byte[BUFFER];
while ((count = tis.read(data, 0, BUFFER)) != -1) {
dest.write(data, 0, count);
}
dest.flush();
dest.close();
BufferedImage img = ImageIO.read(new FileInputStream("temp"));
images.add(img);
}
tis.close();
}
}
ImageIO читает из InputStream. Почему бы вам не передать ZipInputStream ('tis') на' ImageIO.read() '? Каков размер изображений (в байтах) и каков размер кучи JVM? –
Знание разрешения (ширина * высота, возможно, * colordepth) этих изображений также поможет оценить использование памяти. –