Я читаю файл (flash swf) из .Net 3.5 с заголовком, в котором указано, сжато ли тело файла / потока или нет. Однако у меня возникают проблемы - после того, как я перезаписываю основной поток файлов в GZipStream, я получаю исключение, утверждающее, что «магическое число в заголовке GZip неверно. Убедитесь, что вы передаете поток GZip».
Хотя, возможно, я не понимаю, как отформатирован SWF-файл (в документации Adobe говорится только о том, что тело "сжато с использованием открытого стандарта ZLIB. Формат данных, который использует библиотека ZLIB, описывается в Запросе комментариев". (RFC), документы с 1950 по 1952 гг. "), Возможно, я не понимаю, как работает GZipStream.
Итак, мой вопрос двоякий:
1) Будет ли GZipStream работать правильно при передаче родительского потока, который уже был прочитан?
2) GZipStream работает с данными, сжатыми таким образом? А если нет, есть ли другая библиотека с открытым исходным кодом, которую вы бы порекомендовали использовать?
спасибо.
К вашему сведению, приведен фрагмент соответствующего кода (F #):
let reader= match signature with
|['F';'W';'S']-> //uncompresssed
reader
|['C';'W';'S']->
let gzs= new System.IO.Compression.GZipStream(reader.BaseStream, System.IO.Compression.CompressionMode.Decompress)
new BinaryReader(gzs)
|_-> failwith "something is invalid in this header"
let frameSB = List.nth ((reader.PeekChar()|>BitConverter.GetBytes)|>List.ofArray) 0 in
let frameSize = frameSB&&&31uy |> (+) 5uy |> fun fs-> fs+ 8uy-(fs%8uy) //rect data structure....