Microsoft make things complicated part 2
繼續(xù)研究壓縮文件,我又崩潰了。
壓縮文件以16個(gè)簇為單位進(jìn)行壓縮,按壓縮后的數(shù)據(jù)的尺寸分配磁盤空間,然后配上相應(yīng)的稀疏流,形成完整的單元描述。比如,某16簇?cái)?shù)據(jù)壓縮之后只占用7個(gè)簇,系統(tǒng)從卷的210H簇起分配了7個(gè)簇,那么其描述如下:
21 07 10 02 01 09
因?yàn)椴煌臄?shù)據(jù)壓縮率不同,對(duì)于某些類型的數(shù)據(jù),可能壓縮之后的尺寸反而大于壓縮前,因此,對(duì)于此類數(shù)據(jù),直接寫入磁盤反而提高效率。所以MS規(guī)定,如果流尺寸大于等于16簇,則表示該流是非壓縮流,數(shù)據(jù)讀入時(shí)不需要解壓。比如某210H開(kāi)始的非壓縮流數(shù)據(jù)描述如下:
21 10 10 02
對(duì)于尺寸剛好16個(gè)簇的流,那也罷了。
對(duì)于尺寸大于16個(gè)簇的流,歡樂(lè)的事就開(kāi)始了。
比如某16H個(gè)簇的數(shù)據(jù)非壓縮數(shù)據(jù),那么該流的描述是(假設(shè)數(shù)據(jù)位置還是從210H開(kāi)始):
21 16 10 02
因此,第一個(gè)單元(201H,10H)是非壓縮數(shù)據(jù),而其后的6個(gè)簇的數(shù)據(jù)因?yàn)樵谕粋€(gè)描述內(nèi),所有也是非壓縮數(shù)據(jù),因?yàn)樵搯卧那?個(gè)簇是非壓縮數(shù)據(jù),所以該單元的所有數(shù)據(jù)都是非壓縮數(shù)據(jù),那么,假設(shè)第二個(gè)單元的數(shù)據(jù)存放在:
400H 5H, 450H 5H
這流描述就是:
21 16 10 02 21 05 00 04 21 05 50 04
這樣,前后兩個(gè)單元都是非壓縮數(shù)據(jù),這也罷了,如果第二個(gè)單元的最后一個(gè)描述超出該單元(比如450H 5H的那個(gè)流變成450H 7H,描述了再下一單元的2個(gè)簇),那么其后的單元(第三個(gè)單元)也是非壓縮數(shù)據(jù)-_-b,我們可以以此類推……OMG!整個(gè)壓縮文件都是非壓縮數(shù)據(jù)………勞資淚奔T_T