Я читаю файл (flash swf) из .Net 3.5, у которого есть заголовок, который указывает, сжат ли тело файла/потока или нет. Однако у меня возникают проблемы - после того, как я перевяжу базовый поток файлов в GZipStream, я получаю исключение, заявляя, что «волшебное число в заголовке GZip неверно. Убедитесь, что вы передаете поток GZip».Unzipping ZLIB сжатые части двоичного файла
Возможно, я не понимаю, как SWF отформатирован (документация Adobe заявляет только, что тело «сжато с использованием открытого стандарта ZLIB». Формат данных, который использует библиотека ZLIB, описывается Request for Комментарии (RFC) с 1950 по 1952 год »), также может случиться так, что я не понимаю, как работает GZipStream.
Итак, мой вопрос двоякий: 1) Будет ли GZipStream работать нормально, когда передается родительский поток, который уже был прочитан?
2) Работает ли GZipStream с сжатыми данными таким образом? А если нет, есть ли другая библиотека с открытым исходным кодом, которую вы бы рекомендовали использовать?
спасибо.
FYI, вот отрезала соответствующего кода (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....
Спасибо за помощь Стив! Порт порта ZLib, похоже, сделал трюк! Это имеет смысл, на самом деле: компилятор Flash Actionscript 3 написан в java. –