我正在尝试读取压缩的二进制 .x 网格文件,但我的解压缩失败。该文件基本上是一些directx标头信息,然后是MSZIP格式的一堆数据(即2个字节是一个 int blockSize
,2个字节是一个“幻数”,然后是blockSize
放气的字节,然后重复直到没有更多数据)所以每个块我只是得到压缩字节并像这样放气-
internal static byte[] DecompressBlock(byte[] data) {
var result = new List<byte>();
var ms = new MemoryStream(data);
var ds = new DeflateStream(ms, CompressionMode.Decompress);
var newStream = new MemoryStream();
ds.CopyTo(newStream);
ds.Flush();
ds.Close();
return newStream.GetBuffer();
}
第一个区块按预期放气。随后的块是正确的膨胀大小,但是,看似随机的,一些字节不应该是 0,通常以 4-12 个为一组。
如何在保持相同历史缓冲区的同时压缩不同的压缩数据块?
更新:经过更多研究后,看起来在 MSZIP 压缩中这些块是单独放气操作的结果,但它们之间维护着“历史缓冲区”,我不知道是否deflatestream
能够处理这个问题。更新了实际问题