Пользователь загружает большой файл на мой сайт, и я хочу gzip файл и сохранить его в блобе. Таким образом, у меня есть несжатый InputStream, и blob хочет InputStream. Я знаю, как сжимать InputStream к выходному потоку с помощью GZIPOutputStream, но как мне перейти с gzip'ed OutputStream обратно в InputStream, необходимый блобу.Как можно эффективно преобразовать несжатый InputStream в gzip'ed InputStream?
Единственный способ, которым я мог найти, - использовать ByteArrayOutputStream, а затем создать новый InputStream, используя toByteArray. Но это будет означать, что у меня есть полная копия файла в памяти. И меня не удивило бы, если бы реализация драйвера JDBC конвертировала поток в байт [], так что у меня было бы две копии в памяти.
Если вы не хотите, чтобы весь файл в памяти записывался в файл. Как я вижу, данные gzip'd должны куда-то идти. –
Я надеялся перетекать прямо в blob, поэтому мне никогда не приходилось иметь всю вещь в памяти. Похоже, что это не сработает, так как мне нужно знать длину в то время, когда я устанавливаю параметр blob. Я предполагаю, что технически, я мог бы передать в файл, получить размер файла, а затем использовать его в качестве входного потока обратно в blob, поэтому мне никогда не понадобится хранить всю вещь в памяти. В основном я бы использовал файловую систему в качестве моей памяти, которая может оказаться полезной. –