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