许多资料来源中都含有多余数据或对存储信息无用的数据。这常常造成客户机 和服务器应用程序间或电脑间浩如烟海的数据传输。很明显,数据存储和信息传 输问题解决办法是,安装辅助存储装置并扩展现有的通信设备。然而,要做到这 一点,就需要增加组织的运行费用。减轻部分数据存储和信息传输的方法之一是, 以更有效的代码表示数据。本文简要介绍数据压缩和解压缩,以及如何有效地、方便地从JavaTM应用程序内部使用 java.util.zip包压缩和解压缩数据。
虽然 WinZip、gzip和Java ARchive(或 jar)等工具可以用来压缩和解压缩数据,这些工具仍被用作独立 的应用程序。从 Java 应用程序中可以调用这些工具,但并非是简捷有效的解决 方法。在希望迅速地(如在传输到远程机器之前)压缩和解压缩数据的情况下, 尤其如此。本文将:
简要综述数据压缩
描述java.util.zip包
介绍如何使用这些包压缩和解压缩数据
介绍如何压缩和解压缩已序列化的对象以节省磁盘空间
介绍如何迅速压缩和解压缩数据,以提高客户/服务器应用程序的性能
概述数据压缩
文件冗余最单一的类型是字符的重复。例如,下列字符串:
BBBBHHDDXXXXKKKKWWZZZZ
可以更简洁地对本字符串进行编码,方法是以重复字符和代表其重复次数的数 字代替每个重复字符串。因此,上述字符串可以编码为:
4B2H2D4X4K2W4Z
这里的" 4B "表示4个B,而2H表示2个H,等等。以这种方法压缩字符串的编码 方式叫做运行长度编码。
另一个例子,是矩形图像存储。因为是单色位图图像,所以按图表1所示存储。
图表1∶带运行长度编码信息的位图
第二种方法是将图像存为图解元文件∶
矩形11、3、20、5
它表示,该矩形起始坐标是(11, 3),宽度是 20 像素,长度是 5 像素。
矩形图像可以通过计算相等字节的方式,以运行长度编码进行压缩,如下:
0, 40
0, 40
0,10 1,20 0,10
0,10 1,1 0,18 1,1 0,10
0,10 1,1 0,18 1,1 0,10
0,10 1,1 0,18 1,1 0,10
0,10 1,20 0,10
0,40
上面的第一行表示,位图的第一行由40个0组成。第三行表示,位图的第三行 由10个0组成,继之以20个1、10个0组成,诸如此类。
注意,运行长度编码要求对其文件及其编码版本分别表示。所以,本方法不 适用于所有文件。其他的压缩技术包括变长编码(亦称霍夫曼编码)和等其它编 码。更多信息,请参看数据和影象压缩技术的相关书籍。
数据压缩的好处很多。不过,基本的好处是减少存储需求。此外,对于数据 通信,通过介质传递压缩数据会导致信息传输率的增加。注意,数据压缩可以 在现有的硬件上通过软件或采用结合了压缩技术的专门硬件设备完成。图形2显 示了基本的数据压缩方块图。
图形2∶数据压缩方块图
ZIP vs. GZIP
如果使用的是 Windows,就会很熟悉 WinZip 工具,该工具用来创建压缩文 件和从压缩文件中提取文件。不过,在UNIX上,细节有些有点不一样。tar 命令 用来创建文件(非压缩),而另一个程序(gzip或压缩)用来压缩 文件。
WinZip和PKZIP之类的工具既用作归档器,也用 作压缩器。它们将文件压缩并存储在文档中。另一方面,gzip并不 存档文件。因此,在 UNIX 上,tar命令通常用来创建文档,然后 用gzip命令来压缩存档文件。
java.util.zip 包
Java 为兼容 zip 的数据压缩提供 java.util.zip包。它提供 允许读取、创建并修改ZIP和GZIP文件格式的类。此外,提供用于计算任意输入流 校验和的应用类,该类可用于确认输入数据。这个包有一个界面、14个类和2个异 常类,如表1所示。
表 1∶java.util.zip 包
项目 类型 描述
Checksum 界面 由Adler32和CRC32类实现
Adler32 类 用于计算数据流的 Adler32 检验和
CheckedInputStream 类 维持正在读取的数据检验和的输入流。
CheckedOutputStream 类 维持写入数据的检验和的输出流。
CRC32 类 用于计算数据流的 CRC32 检验和
Deflater 类 支持使用 ZLIB 压缩库的常规压缩
DeflaterOutputStream 类 以紧缩压缩格式压缩数据的输出流过滤器
GZIPInputStream 类 文件格式压缩数据的输入流过滤器。
GZIPOutputStream 类 文件格式压缩数据的输出流过滤器。
Inflater 类 支持使用 ZLIB 压缩库的常规解压缩
InlfaterInputStream 类 解压紧缩压缩格式数据的输入流过滤器
ZipEntry 类 代表ZIP压缩文件条目
ZipFile 类 用于从ZIP文件中读取条目
ZipInputStream 类 读取ZIP文件格式文件的输入流过滤器
ZipOutputStream 类 以ZIP文件格式写入文件的输出流过滤器
DataFormatException 异常类 给出数据格式错误的信号
ZipException 异常类 给出 zip 错误的信号
注意: TZLIB压缩库最初是作为“可移植的网络图象文件格式”(PNG) 标准的一部分进行开发的,该标准不受专利的保护。
分享到:
相关推荐
6. 日志记录:在生产环境中,记录压缩和解压缩过程中的日志信息,有助于问题排查。总结Apache Commons Compress 提供了方便的 API 来处理各种类型的压缩文件,包括 tar.gz。通过引入该库,我们可以轻松地在 Java ...
以下是如何使用这两个类进行数据压缩和解压缩的示例: ```java // 压缩 ByteArrayOutputStream baos = new ByteArrayOutputStream(); GZIPOutputStream gos = new GZIPOutputStream(baos); gos.write(data); /...
1. **Java压缩库**:Java标准库提供了`java.util.zip`包,它包含了多种压缩和解压缩的类,如`ZipOutputStream`、`ZipInputStream`、`GZIPOutputStream`和`GZIPInputStream`,用于处理ZIP和GZIP格式的文件。...
本文将深入探讨如何使用Java API来处理ZIP文件格式的压缩和解压缩操作。 首先,我们要了解Java标准库中的`java.util.zip`包,这个包提供了对ZIP文件格式的支持。主要涉及的类有`ZipEntry`和`ZipOutputStream`用于...
在Java编程环境中,处理压缩和解压缩文件是一项常见的任务,特别是在需要打包或传输大量数据时。本篇文章将详细探讨如何使用Java内置的类库来实现ZIP文件的压缩和解压缩,以及解决中文文件名出现乱码的问题。 首先...
在Java中,我们可以利用内置的`java.util.zip`包来实现文件的压缩和解压缩功能。 1. **压缩API**:在Java中,`java.util.zip`包提供了多个类用于处理压缩文件,如`ZipOutputStream`用于创建ZIP文件,`...
在Java中,我们可以使用java.util.zip包中的ZipOutputStream和ZipInputStream类来对Zip文件进行压缩和解压缩操作。 **压缩Zip文件:** 要压缩一组文件到一个Zip文件,我们需要创建一个ZipOutputStream实例,然后...
Java标准库提供了`java.util.zip`包,它包含了多种压缩和解压缩的工具类,如`GZIPOutputStream`用于GZIP压缩,`DeflaterOutputStream`用于DEFLATE算法(如ZIP和RAR文件格式),以及`ZipOutputStream`用于创建ZIP文件...
在编程中,实现压缩和解压缩功能,开发者通常会使用现成的库,如在Python中,有`zlib`、`gzip`和`zipfile`等模块,它们提供了便捷的API来处理各种压缩格式。以`zipfile`为例,这个模块允许我们创建、读取、写入和...
在Java编程中,有时我们需要对文件或文件夹进行压缩和解压缩操作,这在数据传输、备份或存储优化等场景中十分常见。Apache提供了一个强大的第三方库——Commons Compress,它可以帮助我们处理各种格式的压缩文件,...
总之,Java提供了一套完整的API来处理文件的压缩和解压缩,无论是基础的ZIP和GZIP,还是通过第三方库实现的更多压缩格式。在实际开发中,了解并掌握这些工具和技巧对于优化文件存储和传输效率至关重要。
在本项目中,我们将关注如何使用pako库进行gzip压缩和解压缩,并解决在处理中英文内容时可能出现的乱码问题。 首先,让我们详细了解pako库。pako是基于zlib库的一个轻量级实现,它在浏览器和Node.js环境中都能运行...
GZ是一种常用的文件压缩格式,它利用了gzip程序进行压缩,而在Java中,我们可以使用`java.util.zip`包中的类来实现对GZ文件的压缩和解压缩操作。 在给出的代码中,有两个主要的方法:`testGzipOutput()`用于解压GZ...
在Java编程中,压缩和解压缩文件是常见的任务,特别是在处理大量数据或传输文件时。本文将深入探讨如何使用Java来处理压缩文件,特别是针对标题提及的“java压缩文件以及文件夹”。我们将主要关注`ZipCompressor....
压缩API:Java提供了java.util.zip和java.util.jar包来实现文件的压缩和解压缩操作。 压缩算法:通过选择不同的压缩算法,如DEFLATE算法用于ZIP格式,实现对文件的压缩。 流操作:使用Java的输入输出流(InputStream...
总的来说,MiGz是Java开发中一个强大的压缩和解压缩工具,它通过多线程处理和gzip兼容性,为开发者提供了更高效、更灵活的数据压缩解决方案。无论是用于开发还是运维,MiGz都能成为提高工作效率的好帮手。如果你的...
Java 的 `java.util.zip` 包提供了丰富的 API 来支持数据的压缩和解压缩工作。该包中包含了如 `ZipEntry`、`ZipFile`、`ZipInputStream` 和 `ZipOutputStream` 等类,它们可以用来处理 ZIP 格式的文件。此外,还包含...
在Java编程环境中,处理压缩和解压缩任务是常见的需求,特别是在文件操作和数据传输中。本文将详细讲解如何使用Java来解压和压缩tar包,同时解决在处理中文文件名时可能出现的乱码问题,主要关注`javatar-2.5.jar`库...
对于Java版的Winzip压缩工具,这意味着开发者可以查看其实现细节,学习压缩和解压缩的算法,以及根据项目需求进行定制化修改,无需受到商业软件的限制。 2. **Java在压缩领域的应用** Java作为一种跨平台的编程...
在Java编程语言中,实现文件的压缩和解压缩是一项常见的任务,特别是在开发Web应用程序时。本文将深入探讨如何使用Java API来完成这项工作,以及它在实际项目中的应用。 Java提供了一个名为`java.util.zip`的包,...