`

swing 程序发布(一) pack200压缩

阅读更多
目前发布了一个swing 的程序,包括java web start 与applet 两个版本,但是由于第三方包的引入,发布包达到了近5MB,即使在局域网也让人无法忍受那缓慢的加载速度,毕竟对于绝大部分应用来说,网络带宽还是最终的系统瓶颈。

还好JDK5在Java Web Start和Java Plug-in中提供了对gizp和pack200压缩技术的支持,通过压缩将使Java的网络应用在jar的压缩基础上再一次的得到瘦身的飞跃。

gzip
jar包中包含的内容非Java类的资源文件比较多,例如JPEG, GIF等的,用gzip会比较合适

pack200
jar包绝大部分信息是class内容的话,那么pack200绝对是你的首选方案,因为pack200是专门针对class的java类进行优化设计的,主要体现在以下几个方面:

It merges and sorts the constant-pool data in the class files and co-locates them in the archive.
It removes redundant class attributes.
It stores internal data structures.
It use delta and variable length encoding.
It chooses optimum coding types for secondary compression.

压缩签名的整个发布过程

***/JDK5/bin/pack200 --repack demo.jar
--repack的作用等价与pack200和unpack200这两个指令,其作用是对demo.jar里面的class结构用Pack200的格式进行整理,因为签名需要根据jar包的类结构进行散列计算,所以如果不先进行jar的Pack200格式整理的话,等签名后再用pack200进行压缩将会导致签名无效,所以第一步需要进行--repack这个看似无用实则关键的操作
jarsigner -keystore myKeystore demo.jar ...
对Pack200格式整理过的demo.jar进行签名
***/JDK5/bin/pack200 demo.jar.pack.gz demo.jar
对签完名的demo.jar进行Pack200压缩,生成demo.jar.pack.gz

***/JDK5/sample/jnlp/servlet下面的jar包,主要是jnlp-servlet.jar拷贝到要发布的web工程的WEB-INF/lib/目录下
修改web发布工程的web.xml文件,将所有*.jnlp和*.jar的url路径定位到jnlp.sample.servlet.JnlpDownloadServlet进行处理
将demo.jar、demo.jar.pack.gz拷贝到jnlp或者applet指定的路径下
通过以上的操作一切就ok了,也许你想问jnlp和applet需要做什么改动吗,答案是no,一切都由JnlpDownloadServlet进行透明处理了,jnlp和applet里面的指向还是demo.jar,JnlpDownloadServlet自动会根据request的Accept-Encoding决定到底是下发demo.jar.pack.gz还是demo.jar,这样如果客户端安装了JDK5的Java Web Start或者Java Plug-in那么JnlpDownloadServlet自动会下发Pack200压缩的demo.jar.pack.gz包,如果客户端是JDK1.4或者更老的环境,那么JnlpDownloadServlet自然会下发demo.jar的普通包。

Pack200的压缩和解压缩速度是比较快的,而且压缩率也是很惊人的,在我是使用的包4.46MB压缩后成了1.44MB(0.322%),而且随着包的越大压缩率会根据明显,据说如果jar包都是class类可以压缩到1/9的大小。其实JavaWebStart还有很多功能,例如可以按不同的jar包进行lazy下载和单独更新,设置可以根据jar中的类变动进行class粒度的下载。心动不如行动,赶快去对你的发布程序进行瘦身吧。

参考:http://sailing8036.spaces.live.com/blog/cns!69D05DFD4294F487!479.entry
分享到:
评论

相关推荐

    如何制作最小的RCP程序压缩包(包含JRE)

    2. **使用Pack200工具**: Pack200是一种压缩工具,能够有效地压缩Java类库文件(如JAR文件)。通过Pack200对JRE中的关键类库(如rt.jar、charsets.jar等)进行压缩,可以在确保功能完整的前提下显著减少文件大小。 ...

    精简JRE1.4(小于2M,可运行SWT)

    pack200是一种高效的压缩格式,可以显著减小jar文件的大小,从而优化网络传输和存储效率。在部署应用程序或更新JRE时,可能会用到这个工具来处理已压缩的jar文件。 "jre"目录下应该包含了精简JRE1.4的所有核心组件...

    Java即时战略游戏

    而`7z32.dll`和`unrar.dll`是与7-Zip压缩库相关的动态链接库文件,可能用于解压游戏中的一些资源,如`ApoDefence.pack200`,这可能是一个经过pack200压缩的Java类包,包含游戏的代码或者资源文件,解压后可以被...

    java_app_pack.zip_app源码

    【标题】"java_app_pack.zip" 是一个包含Java应用程序源代码的压缩文件,它提供了深入理解Java编程语言和开发移动或桌面应用的宝贵资源。在Java世界中,源码是程序的基本构建块,通过阅读和分析这些源码,开发者可以...

    substance-4.3与5.3版本.zip

    "Substance"是一个非常著名的Java Swing皮肤框架,它允许开发者轻松地改变应用程序的外观和感觉,提供了多种视觉主题,使得Swing应用看起来更加现代和吸引人。 标题提到的"substance-4.3与5.3版本.zip"是一个包含两...

    Ventanas_Ja_java_

    Swing是Java标准版(Java SE)的一部分,提供了丰富的组件和工具来创建桌面应用程序,而JavaFX则是一个用于构建现代、富媒体图形用户界面的框架,它在Java 8之后成为了一个独立的模块。 在Swing中,窗口通常由`...

    swixml_220

    SwixML,全称为"Swing XML",是一款基于Java平台的开源库,它允许开发者使用XML来描述用户界面(UI)的布局和组件,从而简化C/S(客户端/服务器)程序的开发过程。SwixML的核心理念是将UI设计与业务逻辑分离,使得...

    java程序实现JDBC数据库编程.pdf

    ### Java程序实现JDBC数据库编程知识点详解 #### 一、实验背景及目标 在本实验中,我们将通过Java语言和JDBC技术实现一个简单的学生信息处理软件。此实验旨在帮助学习者掌握以下几点: 1. **数据库连接**:了解...

    pmqdgj_bkill.com.zip

    标题 "pmqdgj_bkill.com.zip" 暗示我们关注的是一个与计算机程序相关的压缩文件,可能是一个可执行的 `.com` 文件,而 `bkill` 可能是程序的功能,比如“批量杀进程”或者“后台监控”的意思。然而,由于没有具体的...

    view_image.rar_images view java_jpg view_view ima_view_image

    4. **压缩包子文件的文件名称列表**:只给出了`view_image`,这可能是一个程序或类的名字,用于实现图像查看功能。如果这个程序或类存在,那么它可能会包含上述提到的读取、显示图像的逻辑。 总结起来,本文介绍了...

    2021-2022计算机二级等级考试试题及答案No.17824.docx

    4. 数据库记录删除:在数据库操作中,如果要真正删除一条记录,应该先用`DELETE`命令选择要删除的记录,然后使用`PACK`命令来压缩数据库,删除标记为已删除的记录。直接使用`ZAP`命令会删除整个数据库内容。正确答案...

    2021-2022计算机二级等级考试试题及答案No.1251.docx

    12. 真正删除记录应先用DELETE命令标记要删除的记录,然后使用PACK命令来压缩并删除标记的记录。 13. 表达式7\9的值为0,因为在整数除法中,7除以9的结果向下取整为0。 14. 电子邮件地址的正确形式是用户名@域名。...

    2021-2022计算机二级等级考试试题及答案No.9438.docx

    1. Java编程:`javax.swing.JFileChooser` 是Java Swing库中的一个组件,用于实现文件对话框,它可以让用户选择文件或目录。当使用这个对话框时,首先获取的信息通常是文件对象(D),而不是文件长度(A)、文件路径...

    显示小图像

    在IT领域,尤其是在图形用户界面(GUI)设计和开发中,"显示小图像"是一个常见的需求。这可能涉及到各种编程语言和技术,如Python的Tkinter库、Java的Swing或JavaFX、C#的Windows Forms或WPF,甚至网页开发中的HTML...

    为面板添加图片

    面板是应用程序中用于组织和展示内容的区域,它可以是窗口中的一个部分或者独立的窗口。这篇文章将深入探讨如何在不同环境下为面板添加图片,包括编程语言、框架和工具的使用。 首先,让我们从最常用的编程语言之一...

    EventButtonOnClick

    当你在创建一个图形用户界面(GUI)应用程序时,按钮是用户最常进行交互的组件之一。当用户点击这个按钮,程序会执行特定的代码,这就是所谓的“事件监听”机制。在Java Swing或JavaFX中,我们可以使用事件处理器来...

    2021-2022计算机二级等级考试试题及答案No.5237.docx

    正确的流程是先使用`DELETE`命令选择性地删除记录,然后使用`PACK`命令来压缩数据库,真正移除被删除的记录。直接使用`ZAP`命令会直接清空整个表,这是不可逆的操作。 2. IP地址:IP地址是互联网上主机的唯一标识,...

    2021-2022计算机二级等级考试试题及答案No.1439.docx

    9. 数据库操作:在数据库中,如果要真正删除一条记录,应该先用DELETE命令选择要删除的记录,然后用PACK命令(C)来压缩表,删除实际的物理记录。ZAP命令会直接删除所有记录并重新创建表,这通常不是删除单条记录的...

Global site tag (gtag.js) - Google Analytics