DotNetZip потоковое - PullRequest
       11

DotNetZip потоковое

3 голосов
/ 07 февраля 2012

Я пытаюсь сжать кучу файлов и сделать данные пригодными для использования через поток.

Я бы хотел сохранить как можно меньший объем памяти.

Моя идея состояла в том, чтобы реализовать поток, в котором я получил несколько объектов FileStream в качестве членов данных. Когда вызывался метод Read в моем потоке, я считывал некоторые данные из одного из моих файловых потоков и использовал экземпляр ZipOutputStream для записи сжатых данных во временное хранилище, в которое я затем перенаправлял бы запрос на чтение.

Этот поток временного хранилища будет просто очередью байтов. Поскольку эти байты перемещаются в буфер (посредством вызова Read), они будут удалены из очереди. Таким образом, я буду хранить только те байты, которые еще не были прочитаны.

К сожалению, кажется, что когда я располагаю ZipOutputStream, он должен писать в случайных местах, чтобы создать действительный zip-файл. Это помешает мне использовать мое решение "мимолетные данные".

Надеюсь, это все понятно :)

Есть ли другой способ минимизировать использование памяти при создании zip-файлов? Пожалуйста, помогите!

Спасибо!

1 Ответ

1 голос
/ 08 февраля 2012

ZipOutputStream не нужно записывать в случайные места в выходном потоке (другими словами, вызовите Seek()). Но если поток, который вы записываете в отчеты, сообщает, что он CanSeek, он будет использовать эту возможность для обновления некоторых заголовков.

Итак, убедитесь, что поток, в который вы пишете, возвращает false для CanSeek(), и все должно работать нормально.

...