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