В DB
есть файл изображение в виде массива байтов, который нужно отдать клиенту через сервлет. В nio
есть конструкция в Files.write(Path, bytes)
при помощи которой можно собрать эти байты обратно в файл и записать на диск, но так как мне все равно отдавать это в сервлет, да и вообще запись куда бы то ни было кроме DB
заводит меня на территорию сисадмина, хотелось бы сделать это прямо в хипе.
Возможно ли собрать файл перед отправкой клиенту не трогая дисковое пространство? И если да то как?
У ответа сервлета есть возможность использовать output stream (servlet.getOutputStream()), который предназначен именно для подобных вещей - можно просто переписывать данные из БД в этот поток. Возможно, потребуются дополнительные телодвижения (скорее всего, после записи первого байта в этот поток уже нельзя будет добавлять заголовки к ответу), но сам по себе этот интерфейс придуман именно для таких вещей - чтобы можно было писать какие-то вещи напрямую и не хранить их в оперативной памяти.
В то же время хочу отметить, что хранение файлов в бд создает значительные проблемы для достижения высокого перформанса (начиная от двойной передачи данных по сети и кончая тем, что nginx и аналоги знает про оптимизации типа zero copy, а у вас в приложении их скорее всего не будет)
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Всем приветВозник вопрос в том как использовать значения внутренних классов
Как можно предложить пользователю принять лицензионное соглашение, до запуска программы?
В чем проблема? Почему по завершению теста, Jenkins выводит следующие ошибки?