【发布时间】:2017-01-16 08:23:29
【问题描述】:
我正在尝试读取压缩的二进制 .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 是否能够处理这。更新了实际问题
【问题讨论】:
标签: zip compression deflate deflatestream