Java 工具集教程

pack200.exe 压缩 JAR 文件

pack200.exe 是 Java5 中引入的一个工具,它能对普通的 JAR 文件进行高效压缩。其实现原理是根据 Java 类特有的结构,合并常数池、去掉无用信息等来实现对 Java 类的高效压缩。

如果 JAR 包绝大部分信息是 class 内容,使用 pack200.exe 进行压缩能轻易达到 10%-40% 的压缩率,这在 Java 应用部署中很有用,尤其对于移动 Java 计算,能够大大减小代码下载量。

命令语法

pack200 [-opt... | --option=value]... x.pack[.gz] y.jar

命令选项

该命令的打包选项如下

  • -g, --no-gzip  输出无格式的 *.pack 文件, 不压缩

  • --gzip  (默认值) 使用 gzip 对打包进行后处理

  • -G, --strip-debug  打包时删除调试属性

  • -O, --no-keep-file-order  不传输文件排序信息

  • --keep-file-order  (默认值) 保留输入文件排序

  • -S{N}, --segment-limit={N}  输出段限制 (默认值 N=1Mb)

  • -E{N}, --effort={N}  打包效果 (默认值 N=5)

  • -H{h}, --deflate-hint={h}  传输压缩提示: true, false 或 keep (默认值)

  • -m{V}, --modification-time={V}  传输 modtimes: latest 或 keep (默认值)

  • -P{F}, --pass-file={F}  传输未解压缩的给定输入元素

  • -U{a}, --unknown-attribute={a}  未知属性操作: error, strip 或 pass (默认值)

  • -C{N}={L}, --class-attribute={N}={L}  (用户定义的属性)

  • -F{N}={L}, --field-attribute={N}={L}  (用户定义的属性)

  • -M{N}={L}, --method-attribute={N}={L}  (用户定义的属性)

  • -D{N}={L}, --code-attribute={N}={L}  (用户定义的属性)

  • -f{F}, --config-file={F}  读取文件 F 的 Pack200.Packer 属性

  • -v, --verbose  提高程序详细程度

  • -q, --quiet  将详细程度设置为最低级别

  • -l{F}, --log-file={F}  输出到给定日志文件, 或对于 System.out 指定 '-'

  • -?, -h, --help  输出此消息

  • -V, --version  输出程序版本

  • -J{X}  将选项 X 传递给基础 Java VM

注:

 -P, -C, -F, -M 和 -D 选项累计。

 示例属性定义:  -C SourceFile=RUH。

 Config. 文件属性由 Pack200 API 定义。

 有关 -S, -E, -H-, -m, -U 值的含义, 请参阅 Pack200 API。

 布局定义 (例如 RUH) 由 JSR 200 定义。

重新打包模式通过打包/解包周期更新 JAR 文件:

pack200 [-r|--repack] [-opt | --option=value]... [repackedy.jar] y.jar

命令示例

(1)压缩 JAR 文件为 pack200 格式,如下:

pack200 commons-lang3-3.4.pack.gz commons-lang3-3.4.jar

上面命令将 commons-lang3-3.4.jar 文件压缩为 commons-lang3-3.4.pack.gz,如下图:

image.png

(2)使用 Java 代码实现 pack200 的压缩功能,例如:

package com.hxstrive.pack200;

import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.jar.JarFile;
import java.util.jar.Pack200;

/**
 * Pack200 压缩
 * @author hxstrive.com
 */
public class Pack200Demo {

    public static void main(String[] args) throws Exception {
        OutputStream output = null;
        try {
            Pack200.Packer packer = Pack200.newPacker();
            output = new BufferedOutputStream(new FileOutputStream("E:\\commons-lang3-3.4.pack.gz"));
            packer.pack(new JarFile("E:\\commons-lang3-3.4.jar"), output);
        } finally {
            if(null != output) {
                output.close();
            }
        }
    }

}

注意事项:

(1)请确保你的 JDK 版本包含 pack200 工具,因为该工具可能在某些版本的 JDK 中已被弃用或删除。

(2)由于 pack200 和 unpack200 已被弃用,如果你正在开发一个长期维护的项目,建议寻找其他替代方案来压缩和解压 JAR 文件。

(3)在使用 pack200 时,请注意它的压缩效果可能因 JAR 文件的内容和结构而异。

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号