Posted on 2007-06-06 15:52
my 阅读(385)
评论(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对象)。