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