数据压缩与打包:jar、war、arr、tar、zip

本文详细介绍了无损和有损压缩的概念,对比了ZIP、RAR、GZIP等压缩格式的特点,深入讲解了Java归档文件(JAR)、Web应用归档(WAR)、Android归档(AAR)的打包和压缩技巧,以及tar、tar.gz等Linux打包方式,并探讨了Pack200工具的高效压缩原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1,概念

1)无损压缩和有损压缩

  1. 有损压缩:压缩之后就无法完整还原原始信息,但是压缩率可以很高,主要应用于视频、话音等数据的压缩;
  2. 无损压缩:用于文件等等必须完整还原信息的场合。ZIP、RAR、GZIP、GIF、PNG等等都是无损压缩格式。

2,文件压缩与打包

1)ZIP压缩

  1. 场景:jar包
  2. shell命令:
    需要先下载zip for linux。
功能命令备注
将jpg格式的文件压缩zip jpg.zip *.jpg
将几个文件和目录同时压缩zip -r file1.zip file1 file2 dir1
解压zipunzip file.zip

2)jar打包(Java Archive File,Java 归档文件)、war打包(Web Application Archive)

  1. jar包 = class文件 + 资源 + 配置文件 = zip + META-INF(清单文件);
    一个jar包就是一个java应用程序。
  2. 平台无关的文件格式;
  3. jar文件使用了ZIP压缩格式,通过unzip命令可以解压;

1>Pack200

Java5提供的压缩工具,能对普通的jar文件进行高效压缩。
实现原理:根据Java类特有的结构,合并常数池,去掉无用信息等来实现对java类的高效压缩。对于Jar文件却能轻易达到10-40%的压缩率,甚至接近90%。这在Java应用部署中很有用,尤其对于移动Java计算,能够大大减小代码下载量。

压缩

    Packer packer=Pack200.newPacker();
    OutputStream output=new BufferedOutputStream(new FileOutputStream(outfile));
    packer.pack(new JarFile(jarFile), output);
    output.close();
解压

    Unpacker unpacker=Pack200.newUnpacker();
    output=new JarOutputStream(new FileOutputStream(jarFile));
    unpacker.unpack(pack200File, output);
    output.close();

2>shell命令

常见参数:

-c 创建新的JAR文件包、war文件包

-t 列出JAR文件包的内容列表。
-x 展开JAR文件包的指定文件或全部文件。
-u 更新已存在的JAR包。对于一个已经存在的JAR包。我们任然能够向当中加入新的字节码文件或旧的字节码文件,假设已经存在路径、类名都同样的文件,则更新源文件,假设不存在。则加入该文件。清单文件也能够通过这种方式更改。

-v 显示过程并输出。
-f 指定JAR包的文件名称。通常该选项是必选的。

-m 指定须要包括的MANIFEST.MF清单文件。

-O 仅仅存储。不压缩。  生成的JAR包体积大,但运行速度快。

-M 不产生全部项的清单文件,此參数会忽略-m选项。
[-C 文件夹] 表示转到指定文件夹下去运行jar命令的操作,它相当于优先使用cd命令转到指定文件夹下运行不带-C參数的jar命令。它仅仅能在创建和更新JAR包的时候使用
功能命令备注
包启动
启动jar包java -jar test.jar
启动war包java -jar jenkins.war –httpPort=8090war包一般要放在tomcat中,jenkins的war包自带Jetty服务器,可以直接运行
包解压
包解压jar -xvf xxx.war解压到当前文件夹,并显示解压过程
包解压到目标目录unzip .jar -d 目录
包压缩
把当前目录下的所有文件打包成game.warjar -cvfM0 game.war ./-0 这个是阿拉伯数字,只打包不压缩的意思
将com下的class文件打包成jarjar cvf allenwells.jar com覆盖原文件
向allenwells.jar中加入manifest.mf文件jar uvf allenwells.jar manifest.mf作为普通文件加入。通过-m-m选项设置清单文件
使用自己定义的清单文件mymanifest.mf并将com/文件夹下的全部文件归档到allenwells.jar中jar cvfm allenwells.jar mymanifest.mf -C com/ .
包信息查看
显示jar内文件的具体信息jar tvf allenwells.jar

3>MANFEST.MF文件

常见属性:

Manifest-Version
    用来定义manifest文件的版本号,比如:Manifest-Version: 1.0。最小的清单文件只包含这一条。
    Created-By
    声明该文件的生成者,一般该属性是由jar命令行工具生成的。比如:Created-By: Apache Ant 1.5.1
    Signature-Version
    定义jar文件的签名版本号
    Class-Path
    应用程序或者类装载器使用该值来构建内部的类搜索路径
Main-Class
    定义jar文件的入口类。该类必须是一个可运行的类,一旦定义了该属性就可以通过 java -jar x.jar来运行该jar文件。

3)rar压缩(Roshal ARchive)

  1. 相比zip压缩:压缩率高、解压压缩慢

1>shell命令

功能命令备注
解压rarunrar e file.rar
压缩rarrar a jpg.rar *.jpg需要先下载rar for Linux 。
同时压缩file1,file2,以及目录dir1rar a file1.rar file1 file2 dir1

4)tar打包、tar.gz压缩

  1. linux将多个文件打成tar包。
  2. 经过gzip压缩后的tar文件,形成tar.gz包,扩展名为“xx.tar.gz”;
  3. java通过assembly.xml来打包。

1>shell命令

参数:

5个独立命令,可以和其它命令连用但只能用其中一个:
-c: 建立压缩档案
-x:解压
-t:查看内容
-r:向压缩归档文件末尾追加文件
-u:更新原压缩包中的文件

5个可选命令:
-z:有gzip属性的
-j:有bz2属性的
-Z:有compress属性的
-v:显示所有过程
-O:将文件解开到标准输出

1个必备参数:表示归档名
-f  name.tar 
功能命令备注
解压 tar包tar –xvf file.tar
解压tar.gztar xzvf dist_10_30.tar.gz -C /www解压到对应目录www
压缩test为tar.gz包tar -czvf test.tar.gz test
将目录里所有jpg文件打成tar包并压缩tar –czf jpg.tar.gz *.jpg去掉-z不压缩直接打tar包
将所有.gif的文件增加到all.tar的包里面去tar -rf all.tar *.gif
更新原来tar包all.tar中logo.gif文件tar -uf all.tar logo.gif
列出all.tar包中所有文件tar -tf all.tar

5)其他

功能命令备注
压缩bzip2 file1
压缩gzip file1
解压 tar.bz2tar -xjvf file.tar.bz2
解压tar.Ztar –xZvf file.tar.Z
解压bz2bunzip2 file1.bz2
解压gzgunzip file1.gz

6)*.aar,AAR(Android Archive)

  1. Android库项目的二进制归档文件,包含所有资源,class以及res资源文件。
    AAR = AndroidManifest.xml + classes.jar + res + R.txt
  2. 解压:找一个aar文件,然后修改后缀名为‘zip’或者‘rar’格式,然后解压该文件;
  3. 对于一些不常变动的 Android Library,我们可以直接引用 aar,加快编译速度。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值