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