Пользователь загружает большой файл на мой веб-сайт, и я хочу к gzip файл и храню его в блобе. Таким образом, у меня есть несжатый InputStream, и блоб хочет InputStream. Я знаю, как сжать InputStream до использования Outputstream GZIPOutputStream, но как я иду от gzip'ed OutputStream назад в InputStream, необходимый блобу.
Единственным путем я мог найти, включает использование ByteArrayOutputStream и затем создание нового InputStream с помощью toByteArray. Но это будет означать, что у меня есть вся копия файла в памяти. И меня не удивило бы, если бы реализация драйвера JDBC преобразовала поток в байт [] также, таким образом, у меня было бы две копии в памяти.
Если вы находитесь на Java 1.6, вы можете использовать java.util.zip.deflaterputtream
. Насколько я могу сказать, это делает именно то, что вы хотите. Если вы не можете использовать 1.6, вы должны быть в состоянии переосмыслить DeflaterPutStream
, используя java.util.zip.deflater
. При чтении данных обратно из BLOB используйте InflaughtStream
в качестве фильтра, чтобы получить исходные данные.