Я работаю над Java-приложением, в котором файлы будут храниться в базе данных. Первоначально мы извлекали файлы, уже находящиеся в БД, просто вызывая getBytes
в нашем наборе результатов:
byte[] bytes = resultSet.getBytes(1);
...
Этот байтовый массив был затем преобразован в DataHandler
с использованием очевидного конструктора:
dataHandler=new DataHandler(bytes,"application/octet-stream");
Это прекрасно работало, пока мы не начали пытаться хранить и извлекать файлы большего размера. Выгрузка всего содержимого файла в байтовый массив с последующим построением DataHandler
из этого просто требует слишком много памяти.
Моя непосредственная идея - получить поток данных в базе данных с помощью getBinaryStream
и каким-то образом преобразовать этот InputStream
в DataHandler
эффективным способом памяти. К сожалению, не похоже, что есть прямой способ конвертировать InputStream
в DataHandler
. Другая идея, с которой я играл, - это чтение фрагментов данных из InputStream
и запись их в OutputStream
из DataHandler
. Но ... я не могу найти способ создать "пустой" DataHandler
, который возвращает ненулевое OutputStream
, когда я звоню getOutputStream
...
Кто-нибудь делал это? Буду признателен за любую помощь, которую вы можете оказать мне, или поведет в правильном направлении.