import java.util.zip.Deflater;
import java.util.zip.Inflater;
import java.util.zip.DataFormatException;
import java.io.ByteArrayOutputStream;
public class CompressionTools {
// Export only static methods
private CompressionTools() {}
public static byte[] compress(byte[] value, int offset, int length, int compressionLevel) {
ByteArrayOutputStream bos = new ByteArrayOutputStream(length);
Deflater compressor = new Deflater();
try {
compressor.setLevel(compressionLevel); //将当前压缩级别设置为指定值。
compressor.setInput(value, offset, length);
compressor.finish(); //调用时,指示压缩应当以输入缓冲区的当前内容结尾。
// Compress the data
final byte[] buf = new byte[1024];
while (!compressor.finished()) {
//如果已到达压缩数据输出流的结尾,则返回 true。
int count = compressor.deflate(buf);
// 使用压缩数据填充指定缓冲区。
bos.write(buf, 0, count);
}
} finally {
compressor.end(); //关闭解压缩器并放弃所有未处理的输入。
}
return bos.toByteArray();
}
public static byte[] compress(byte[] value, int offset, int length) {
return compress(value, offset, length, Deflater.BEST_COMPRESSION);
// 最佳压缩的压缩级别
}
public static byte[] compress(byte[] value) {
return compress(value, 0, value.length, Deflater.BEST_COMPRESSION);
}
public static byte[] decompress(byte[] value) throws DataFormatException {
ByteArrayOutputStream bos = new ByteArrayOutputStream(value.length);
Inflater decompressor = new Inflater();
try {
decompressor.setInput(value);
final byte[] buf = new byte[1024];
while (!decompressor.finished()) {
int count = decompressor.inflate(buf);
bos.write(buf, 0, count);
}
} finally {
decompressor.end();
}
return bos.toByteArray();
}
}
具体 API 地址:
http://www.gznc.edu.cn/yxsz/jjglxy/book/Java_api/java/util/zip/Deflater.html
分享到:
相关推荐
5. **Inflater/Deflater**: 这两个类是用于压缩和解压缩数据的,它们与编码问题无关,但在处理ZIP文件时也会用到。 6. **自定义实现**: 如果源码修改不是首选方案,也可以选择自定义一个类库,如Apache Commons ...
对于更底层的控制,你可以使用`java.util.zip.Deflater`进行压缩和`java.util.zip.Inflater`进行解压缩。这两个类提供了对DEFLATE算法的直接访问,DEFLATE是GZIP和ZIP背后的核心压缩算法。 4. **源代码实践**: ...
在Java中,Zlib库被内置于`java.util.zip`包中,通过`Inflater`和`Deflater`类提供压缩和解压缩服务。例如,你可以使用`Deflater`类来压缩数据,然后用`Inflater`类解压。 ```java byte[] compressedData = ...; //...
4. **Deflater与Inflater**:`java.util.zip`包还提供了Deflater和Inflater类,它们分别用于数据压缩和解压缩。Deflater可以与任何输出流结合,将数据压缩成Deflate格式,而Inflater则可以与任何输入流结合,解压缩...
这个包包含了一系列类,如ZipOutputStream用于创建ZIP文件,ZipInputStream用于读取和解压ZIP文件,以及Deflater和Inflater类用于数据的压缩和解压缩。通过这些类,开发者可以方便地构建一个功能完整的压缩工具。 ...
JavaZip压缩类是Java编程语言中用于处理ZIP文件格式的核心工具,主要集中在java.util.zip包中。这个包提供了多种类和接口,使得开发者能够轻松地对数据进行压缩和解压缩,尤其是在开发需要处理大量数据的应用时,如...
Java的`ZipFile`类提供了一种方便的方式来读取已存在的`Zip`文件,而`Deflater`和`Inflater`类则分别用于压缩和解压缩原始数据。 6. **性能优化** 当处理大量文件时,可以考虑使用缓冲区来提高性能,以及使用多...
Java标准库提供了`java.util.zip`包,该包包含了处理压缩和解压缩功能的类,如`ZipOutputStream`和`ZipInputStream`。这两个类分别用于创建ZIP文件和读取ZIP文件。 2. **`ZipOutputStream`**: 这个类用于创建ZIP...
主要的类有ZipOutputStream用于创建zip文件,ZipInputStream用于读取zip文件,以及Deflater和Inflater用于压缩和解压缩数据。 2. **创建ZIP文件**:使用ZipOutputStream,可以通过不断地调用putNextEntry()方法来...
1. **Java压缩库**: Java标准库提供了`java.util.zip`包,该包包含了处理ZIP、GZ、Z和BZip2等压缩格式的类。如`ZipOutputStream`用于创建ZIP文件,`GZIPOutputStream`用于GZIP压缩,`InflaterInputStream`和`...
3. **Deflater和Inflater**:除了GZIP,Java还提供了`Deflater`和`Inflater`类,它们分别用于数据压缩和解压缩,支持DEFLATE算法,这是ZIP文件格式的一部分。 4. **文件读写操作**:压缩和传输数据前,需要对本地...
在Java中,我们可以使用java.util.zip包中的类来处理ZIP文件。 ZipUtils通常包含以下功能: 1. 压缩文件/目录:它会遍历指定的文件或目录,使用Deflater类进行压缩,然后将结果写入ZIP输出流。 2. 解压缩文件:读取...
Java提供了多种库来支持文件的压缩和解压缩,最常用的是Java标准库中的`java.util.zip`包。这个包提供了几个关键类,如`ZipOutputStream`和`ZipInputStream`用于处理ZIP格式的压缩文件,而`GZIPOutputStream`和`...
例如,Java标准库中的`java.util.zip`包就包含了多种压缩和解压缩工具,如GZIP、Deflater和Inflater等。GZIP是一种常见的无损压缩格式,常用于文件的压缩和HTTP请求的传输。Deflater和Inflater则是GZIP的底层实现,...
`ZipEntry`类代表ZIP文件中的一个条目,而`Inflater`和`Deflater`则用于压缩和解压缩数据。 要实现文件解压,我们需要遵循以下步骤: 1. **创建ZipInputStream对象**:通过`new ZipInputStream(new ...
1. **ZipFile和ZipInputStream**:Android提供了`java.util.zip`包中的`ZipFile`和`ZipInputStream`类用于读取和解压ZIP文件。它们可以遍历压缩包中的所有条目,逐个解压到指定目录。 2. **Gzip和Deflater**:如果...
Java的`java.util.zip`包提供了对DEFLATE算法的支持,主要通过`Deflater`和`Inflater`两个类来实现压缩和解压缩功能。 `Deflater`类是用于数据压缩的,而`Inflater`类则用于解压缩。在给定的代码示例中,可以看到这...