我正在从 .Net 3.5 中读取一个文件(一个 flash swf),该文件的标题表明文件/流的主体是否被压缩。但是,我遇到了问题——在将基本文件流重新包装到 GZipStream 中后,我收到一个异常,指出“GZip 标头中的幻数不正确。请确保您正在传递 GZip 流。”
虽然我可能不了解 SWF 的格式(Adobe 的文档仅声明正文是“使用 ZLIB 开放标准压缩的。ZLIB 库使用的数据格式由 Request for Comments (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....