Как преобразовать InputStream в DataHandler?

Я работаю над веб-приложением 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...

Кто-либо сделал это? Я ценил бы любую справку, которую Вы можете дать мне или ведете в правильном направлении.

23
задан pcorey 13 May 2010 в 21:49
поделиться

1 ответ

Мой подход заключается в том, чтобы написать пользовательский класс, реализующий DataSource, который обернет ваш InputStream. Затем создайте DataHandler, передав ему созданный DataSource.

16
ответ дан 29 November 2019 в 01:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: