Как я могу преобразовать несжатый InputStream в gzip'ed InputStream эффективно?

Пользователь загружает большой файл на мой веб-сайт, и я хочу к gzip файл и храню его в блобе. Таким образом, у меня есть несжатый InputStream, и блоб хочет InputStream. Я знаю, как сжать InputStream до использования Outputstream GZIPOutputStream, но как я иду от gzip'ed OutputStream назад в InputStream, необходимый блобу.

Единственным путем я мог найти, включает использование ByteArrayOutputStream и затем создание нового InputStream с помощью toByteArray. Но это будет означать, что у меня есть вся копия файла в памяти. И меня не удивило бы, если бы реализация драйвера JDBC преобразовала поток в байт [] также, таким образом, у меня было бы две копии в памяти.

6
задан Brian Deterling 2 February 2010 в 18:21
поделиться

1 ответ

Если вы находитесь на Java 1.6, вы можете использовать java.util.zip.deflaterputtream . Насколько я могу сказать, это делает именно то, что вы хотите. Если вы не можете использовать 1.6, вы должны быть в состоянии переосмыслить DeflaterPutStream , используя java.util.zip.deflater . При чтении данных обратно из BLOB используйте InflaughtStream в качестве фильтра, чтобы получить исходные данные.

4
ответ дан 17 December 2019 в 07:04
поделиться
Другие вопросы по тегам:

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