docx/ fzip引發的一堆挫事

來源:互聯網
上載者:User

 估計上回分析EMF檔案還不過癮,這回突然有興趣想把docx裡面的圖片給挖出來。用RIA來實現,B/S模式的服務還是比較方便的。

 

1,從docx說起,改了尾碼為zip就可以看到裡面有啥東西了。圖片就放在word/media檔案夾下,圖片的其他資訊放在word/document.xml裡面。對於ooxml,用的時候再去看那些節點是什麼意思,這樣理解得更快點,不適合閑暇時玩弄。docx大概就這樣,對它不太有興趣。

 

2,從fzip說起,開源庫,compress和decompress檔案。這個開源庫用了個編碼技巧,代碼如下:

protected function parse(stream:IDataInput):Boolean {<br />while (parseFunc(stream));<br />return (parseFunc === parseIdle);<br />}

  parseFunc為function類型,一個while裡面跳了parseHead,parseExt,parseContent幾個函數後再結束,也就是等於把zip裡面的每個壓縮檔的檔案頭和資料,擴充欄位都跑了一遍。和代碼大全裡面提到的索引方法類似,可以修改一下之前寫EMF檔案分析的幾個很突兀的if else if格式。用fzip很快就把docx裡面的圖片給取出來了,不過這樣做下去也沒太多意思,但如果不用fzip,直接手工取出來會是咋樣的。

 

3,deflate,zlib

網上的一撮撮的代碼都是用AIR實現的,大部分zip都是用deflate來壓縮的,所以把資料部分取出來後,直接一個uncompress("deflate")就處理完了。沒啥高明之處。而用RIA,就好玩了。RIA只對ZLIB做處理,也就是大部分zip都無法用RIA直接解壓。而deflate和zlib核心部分是相同的,而zlib比deflate多了2個頭位元組和尾部一個4位元組的校正碼,這樣把資料部分抽取出來後,加上個頭和尾,然後用uncompress就可以解壓。如果沒有理解錯壓縮資料這部分,應該能解出來,但是實驗結果卻還是報出解壓錯誤。再看回fzip裡面的東西,zlib的校正碼是_adler32,而這個adler32卻是在擴充欄位裡面讀取的,大部分zip的擴充欄位還都是為0.所以得出結論,做了件挫事。用deflate格式來壓縮的話,就只能用deflate來解,其他格式資訊不足,顯然就不能用其他格式的函數來解。挫!

 

4,fzip,壓縮資料演算法

這個開源庫很不錯,以及一個壓縮資料這一塊還是狠迷人的。學習裡面的全部時間上估計不太實際,學裡面的部分,有些時候還是可以做到。多做些挫事,多長些智慧。

 

附上一些查過來的網址 :

gzip原理與實現:

http://blog.csdn.net/FringeDream/archive/2005/12/08/546890.aspx

壓縮演算法deflate

http://hi.baidu.com/ͼ%BA%BC%BFƼ%BC/blog/item/b2d1731812146eb34bedbc5b.html

flex zlib壓縮資料包格式

http://wenyu.csai.cn/user1/24996/archives/2009/37782.html

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.