Как загрузить огромный образ в базу данных без Java Виртуальная машина выдает OutOfMemory Ошибка? - PullRequest
0 голосов
/ 09 января 2020

Постановка задачи

Мне нужно загрузить плавающее изображение из 10 тыс. Строк и 3 тыс. Столбцов и отобразить его на JPanel, используя BufferedImage. Если я загружаю все изображение, используя FileChannel, я получаю JVM OutOfMemory Error. Я не могу жестко закодировать JVM для запуска с большим объемом памяти, так как это не решит проблему открытия образа на меньших компьютерах.

Я пытаюсь загрузить изображение, разделить его на тайлы и сохранить в базе данных в памяти, такой как H2, из которой я получу доступ к соответствующему тайлу и покажу его.

Проблемы

Чтобы открыть и разделить изображение на плитку, мне нужно либо открыть все изображение, которое устраняет проблему, либо прочитать каждый пиксель / число с плавающей точкой (FileInputStream), которое мучительно медленно .

(FileInputStream медленнее, чем FileChannel)

Я могу прочитать полосу (все столбцы, но с меньшим количеством строк), используя FileChannel, и обрезать ее, чтобы создать плитку, но это снова проблема, поскольку чтение полосы зависит от количества столбцов, которые у меня есть, что опять-таки является проблемой, если количество столбцов очень велико, JVM выдаст OutOfMemoryError.

Objective

Tile: Подмножество изображения, которое может обрабатываться JVM.

Считать плитку изображения по плитке и сохранить ее в базе данных In-Memory. Если и когда мне понадобятся плитки, я извлечу их из базы данных In Memory и покажу на JPanel, используя BufferedImage класс.

...