Microsoft make things complicated part 2
扫描二维码
随时随地手机看文章
继续研究压缩文件,我又崩溃了。
压缩文件以16个簇为单位进行压缩,按压缩后的数据的尺寸分配磁盘空间,然后配上相应的稀疏流,形成完整的单元描述。比如,某16簇数据压缩之后只占用7个簇,系统从卷的210H簇起分配了7个簇,那么其描述如下:
21 07 10 02 01 09
因为不同的数据压缩率不同,对于某些类型的数据,可能压缩之后的尺寸反而大于压缩前,因此,对于此类数据,直接写入磁盘反而提高效率。所以MS规定,如果流尺寸大于等于16簇,则表示该流是非压缩流,数据读入时不需要解压。比如某210H开始的非压缩流数据描述如下:
21 10 10 02
对于尺寸刚好16个簇的流,那也罢了。
对于尺寸大于16个簇的流,欢乐的事就开始了。
比如某16H个簇的数据非压缩数据,那么该流的描述是(假设数据位置还是从210H开始):
21 16 10 02
因此,第一个单元(201H,10H)是非压缩数据,而其后的6个簇的数据因为在同一个描述内,所有也是非压缩数据,因为该单元的前6个簇是非压缩数据,所以该单元的所有数据都是非压缩数据,那么,假设第二个单元的数据存放在:
400H 5H, 450H 5H
这流描述就是:
21 16 10 02 21 05 00 04 21 05 50 04
这样,前后两个单元都是非压缩数据,这也罢了,如果第二个单元的最后一个描述超出该单元(比如450H 5H的那个流变成450H 7H,描述了再下一单元的2个簇),那么其后的单元(第三个单元)也是非压缩数据-_-b,我们可以以此类推……OMG!整个压缩文件都是非压缩数据………劳资泪奔T_T