Я работаю над 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
...
Кто-нибудь это сделал? Я был бы признателен за любую помощь, которую вы можете дать мне или ведет в правильном направлении.