Собрать файл из байтов используя только heap

319
30 июля 2017, 08:08

В DB есть файл изображение в виде массива байтов, который нужно отдать клиенту через сервлет. В nio есть конструкция в Files.write(Path, bytes) при помощи которой можно собрать эти байты обратно в файл и записать на диск, но так как мне все равно отдавать это в сервлет, да и вообще запись куда бы то ни было кроме DB заводит меня на территорию сисадмина, хотелось бы сделать это прямо в хипе.

Возможно ли собрать файл перед отправкой клиенту не трогая дисковое пространство? И если да то как?

Answer 1

У ответа сервлета есть возможность использовать output stream (servlet.getOutputStream()), который предназначен именно для подобных вещей - можно просто переписывать данные из БД в этот поток. Возможно, потребуются дополнительные телодвижения (скорее всего, после записи первого байта в этот поток уже нельзя будет добавлять заголовки к ответу), но сам по себе этот интерфейс придуман именно для таких вещей - чтобы можно было писать какие-то вещи напрямую и не хранить их в оперативной памяти.

В то же время хочу отметить, что хранение файлов в бд создает значительные проблемы для достижения высокого перформанса (начиная от двойной передачи данных по сети и кончая тем, что nginx и аналоги знает про оптимизации типа zero copy, а у вас в приложении их скорее всего не будет)

READ ALSO
JSP использование forEach для вложенных классов

JSP использование forEach для вложенных классов

Всем приветВозник вопрос в том как использовать значения внутренних классов

332
JAVA лицензионное соглашение

JAVA лицензионное соглашение

Как можно предложить пользователю принять лицензионное соглашение, до запуска программы?

304
Условия с активностью jtextfield

Условия с активностью jtextfield

Есть два jtextfield и один jbutton

267
По завершению теста Jenkins выводит ошибки

По завершению теста Jenkins выводит ошибки

В чем проблема? Почему по завершению теста, Jenkins выводит следующие ошибки?

303