压缩目标越大,压缩效果越明显!
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
public class ByteTest {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
String issueIds = "10068111,10068112,10068113,10068114,10068115,10068116,"
+ "10068117,10068118,10068119,10068120,10068121,10068122,10068123,"
+ "10068124,10068125,10068126,10068127,10068128,10068129,10068130,"
+ "10068131,10068132,10068133,10068134,10068135,10068136,10068137,"
+ "10068138,10068139,10068140,10068141,10068142,10068143,10068144,"
+ "10068145,10068146,10068147,10068148,10068149,10068150,10068151";
System.err.println("彩期数:" + (issueIds.split(",")).length);
System.err.println("源字符串长度:" + issueIds.length());
String comp = compress(issueIds);
System.err.println("压缩后字符串长度:" + comp.length());
String uncomp = uncompress(comp);
System.err.println("解压后字符串长度:" + uncomp.length() );
System.err.println("解压是否丢失:" + !issueIds.equals(uncomp));
}
// 压缩
public static String compress(String str) throws IOException {
if (str == null || str.length() == 0) {
return str;
}
ByteArrayOutputStream out = new ByteArrayOutputStream();
GZIPOutputStream gzip = new GZIPOutputStream(out);
gzip.write(str.getBytes());
gzip.close();
return out.toString("ISO-8859-1");
}
// 解压缩
public static String uncompress(String str) throws IOException {
if (str == null || str.length() == 0) {
return str;
}
ByteArrayOutputStream out = new ByteArrayOutputStream();
ByteArrayInputStream in = new ByteArrayInputStream(
str.getBytes("ISO-8859-1"));
GZIPInputStream gunzip = new GZIPInputStream(in);
byte[] buffer = new byte[256];
int n;
while ((n = gunzip.read(buffer)) >= 0) {
out.write(buffer, 0, n);
}
return out.toString();
}
public static byte[] encode(String srcString) throws UnsupportedEncodingException {
byte[] input = srcString.getBytes("UTF-8");
byte[] output = new byte[input.length * 2];
Deflater compresser = new Deflater();
try {
compresser.setInput(input);
compresser.finish();
int compressedDataLength = compresser.deflate(output);
byte[] contentByte = new byte[compressedDataLength];
System.arraycopy(output, 0, contentByte, 0, compressedDataLength);
return contentByte;
} finally {
compresser.end();
}
}
public static String decode(byte[] encodeByte) {
String outputString = "";
try {
boolean flag = true;
int resultLength = 0;
byte[] result = null;
int i = 1;
while (flag) {
Inflater decompresser = new Inflater();
try {
result = new byte[encodeByte.length * 20 * i];
decompresser.setInput(encodeByte, 0, encodeByte.length);
resultLength = decompresser.inflate(result);
if (decompresser.getRemaining() == 0) {
flag = false;
}
} finally {
decompresser.end();
}
i++;
}
outputString = new String(result, 0, resultLength, "UTF-8");
} catch (Exception e) {
e.printStackTrace();
}
return outputString;
}
}
分享到:
相关推荐
在给定的文件"ZLibUtils.java"中,我们可以预见到它可能包含了用于压缩和解压缩的实用方法,封装了上述的Deflater和Inflater使用流程。这些方法可以方便地在项目中复用,提高代码的可读性和维护性。 总之,Deflater...
本篇将详细探讨两种主要的方法:Inflater和Deflater,它们分别用于解压缩和压缩字符串。 Deflater是Java中的核心压缩工具,它实现了DEFLATE算法,该算法被广泛应用于如ZIP和GZIP等文件格式。使用Deflater,我们可以...
根据给定文件的信息,本文将围绕“字符串的压缩与解压”这一主题展开,深入探讨字符串压缩和解压的基本原理、实现方法以及应用场景等多方面内容。 ### 字符串压缩和解压概述 字符串的压缩与解压是计算机科学中的一...
"Android 加密压缩解密解压缩字符串简单DEMO"是一个示例项目,它展示了如何处理字符串的加密、压缩、解密和解压缩过程,这对于处理大量数据在后台与前台之间传输的情况非常有用。下面,我们将详细探讨这些关键知识点...
本主题聚焦于Java中的文件压缩与解压缩实践,这对于数据存储、传输以及备份至关重要。通过源代码和论文的结合,我们可以深入理解这一技术的核心原理和实际操作。 Java提供了多种库来支持文件的压缩和解压缩,最常用...
4. **Deflater与Inflater**:`java.util.zip`包还提供了Deflater和Inflater类,它们分别用于数据压缩和解压缩。Deflater可以与任何输出流结合,将数据压缩成Deflate格式,而Inflater则可以与任何输入流结合,解压缩...
4. **Deflater与Inflater**:`Deflater`是用于执行DEFLATE压缩算法的类,而`Inflater`用于解压DEFLATE格式的数据。这两个类可以用于自定义流处理,比如创建一个自定义的压缩流。 5. **文件读写操作**:在进行压缩...
在Java编程语言中,文件的压缩与解压缩是常见的任务,尤其在数据传输、存储优化以及备份场景下显得尤为重要。本资源"JAVA开发JAVA文件压缩与解压缩实践(源代码+论文)"提供了一套完整的实践教程,包含了源代码实现和...
与Zip不同,Gzip只能压缩单个文件。在Java中,`java.util.zip.GZIPOutputStream`和`GZIPInputStream`用于Gzip的压缩和解压缩。以下是如何使用Gzip压缩文件的示例: ```java File inputFile = new File("input.txt")...
Java文件压缩与解压缩是Java开发中常见的操作,特别是在数据传输、存储优化和备份场景下。本实践项目提供了源代码和相关文档,帮助开发者深入理解并应用这一技术。以下是关于Java文件压缩与解压缩的核心知识点: 1....
7. **GZIPOutputStream 和 GZIPInputStream**: Java标准库还提供了处理GZIP格式的类,GZIPOutputStream用于压缩数据到GZIP文件,而GZIPInputStream则用于解压缩GZIP文件。虽然GZIP格式不支持多文件压缩,但它们在...
在Java中,`Deflater`和`Inflater`类用于实现DEFLATE压缩算法,这是ZIP格式所采用的标准。下面将详细介绍如何使用这些类进行文件压缩和解压缩。 1. **文件压缩**: - 创建`Deflater`对象并设置压缩级别(0-9,9为...
2. **Deflater与Inflater**: `Deflater`是用于压缩数据的类,它使用DEFLATE算法(也是ZIP和GZIP文件格式的基础)。而`Inflater`则是用来解压缩数据的,对应的是`Deflater`的逆过程。这两个类可以独立于ZIP格式使用,...
Java 实现文件压缩打包涉及到多个不同的格式,包括 ZIP、GZIP、7Z 和 ZLIB。这些格式各有特点,适用于不同的场景。以下将详细介绍如何利用 Java 原生类和 Apache Commons Compress 库来实现这四种格式的压缩。 1. *...
解压缩时,先将Base64编码的字符串解码回字节数组,然后调用`uncompress`方法解压缩,最后将解压缩后的数据写回到新的文件`D:\testinflate.txt`。 需要注意的是,`Deflater`和`Inflater`在使用完毕后应调用`end()`...
Java文件压缩与解压缩是软件开发中的一个常见需求,尤其在大数据传输、存储优化和程序打包等场景下显得尤为重要。本项目围绕这个主题展开,旨在为毕业生提供一个实用的编程实践,通过Java语言实现文件的压缩和解压缩...