Posted on 2007-06-06 15:52
my 閱讀(402)
評論(0) 編輯 收藏 所屬分類:
手機相關
一、什么是Pak文件:
Pak文件就是將多個文件打包為一個單獨文件,在這個文件中保存著多個文件的數據,當然還有一些描述文件結構的數據。所以將“Pak”作為文件的后綴是一種常規的用法,大家可以自定義其它的文件后綴。
二、為什么使用Pak文件:
JAVA手機網[www.cnjm.net]
由于MIDP對發布安裝的j2me程序大小進行了限制,所以縮小發布程序就意味著能夠提供更多的程序或者內容(如圖片、音樂)給用戶。而通過研究發現zip/jar算法對大文件的壓縮率高于對等量的多個小文件的壓縮率。
當然還有其它方法,這里簡單做一下討論比如使用混淆器ProGuard的“-overloadaggressively”選項使jar文件縮小,但也會導致一些錯誤,因為這種方法生成jar中的class符合java byte code標準,但是與java語法相悖,嚴重的可能造成一些jre對Object的序列化錯誤。
所以使用Pak方法將程序中要用到的資源(圖片、音樂、文本)組合為單一文件是一個安全有效的方法。而且對于一些商用程序,完全可以在pak文件中對文件數據進行加密,很好的保護了作者和公司的權益。本人的sample中使用了簡單的“加減法”加密,對于手機這類設備來講是一個效率較高的選擇。
三、Pak文件的結構:
大家可以自己設計Pak文件結構,本人這里只是拋磚引玉的作個sample。下面就是本人設計的Pak文件結構:
PAK File Header:Pak文件的頭部
JAVA手機網[www.cnjm.net]
JAVA手機網[www.cnjm.net]
* 簽名:6字節char數組 * 版本號:32位float * 文件table數量:32位整數 * 密碼行為:8位字節 * 密碼:8位字節 * 文件唯一ID:10字節char數組 * 保留位:32位整數(4字節)
File Table:Pak文件中包含文件的列表,在一個Pak文件中一個被包含的文件對應一個File Table。
* 文件名:30字節char數組 * 文件大小:32位整型 * 文件在pak文件中的位移:32位整數
Concatenated File Data:按File Table的順序連接在一起的文件數據。
* 文件數據
四、程序框架:
說明:由于Pak文件的制作和使用分別要使用兩個java應用領域:j2se和j2me,所以本人將PakUtil類制作了2個版本(j2se和j2me)。
程序框架如下:
JAVA手機網[www.cnjm.net]
1。PakHeader類,定義了Pak文件頭。
2。PakFileTable類,定義Pak文件table。
3。PakUtil類(j2se版),具備兩個功能:將多個png圖片合成一個Pak文件,并使用簡單的加減加密法對其進行加密;從Pak文件中取出png圖片,構造byte數組(可以用來構造Image對象)或者寫為文件。
PakUtil類(j2me版),具備的功能:從Pak文件中取出png圖片,構造byte數組(可以用來構造Image對象)。