`
buzhucele
  • 浏览: 331674 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java压缩(gzip,Inflater,Deflater )文件与字符串

    博客分类:
  • java
阅读更多
压缩目标越大,压缩效果越明显!
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;
	}

}
分享到:
评论

相关推荐

    用Deflater与Inflater实现字节的压缩与解压

    在给定的文件"ZLibUtils.java"中,我们可以预见到它可能包含了用于压缩和解压缩的实用方法,封装了上述的Deflater和Inflater使用流程。这些方法可以方便地在项目中复用,提高代码的可读性和维护性。 总之,Deflater...

    压缩和解压缩字符串

    本篇将详细探讨两种主要的方法:Inflater和Deflater,它们分别用于解压缩和压缩字符串。 Deflater是Java中的核心压缩工具,它实现了DEFLATE算法,该算法被广泛应用于如ZIP和GZIP等文件格式。使用Deflater,我们可以...

    字符串的压缩和解压

    根据给定文件的信息,本文将围绕“字符串的压缩与解压”这一主题展开,深入探讨字符串压缩和解压的基本原理、实现方法以及应用场景等多方面内容。 ### 字符串压缩和解压概述 字符串的压缩与解压是计算机科学中的一...

    Android 加密压缩解密解压缩字符串简单DEMO

    "Android 加密压缩解密解压缩字符串简单DEMO"是一个示例项目,它展示了如何处理字符串的加密、压缩、解密和解压缩过程,这对于处理大量数据在后台与前台之间传输的情况非常有用。下面,我们将详细探讨这些关键知识点...

    JAVA文件压缩与解压缩实践(源代码+论文)

    本主题聚焦于Java中的文件压缩与解压缩实践,这对于数据存储、传输以及备份至关重要。通过源代码和论文的结合,我们可以深入理解这一技术的核心原理和实际操作。 Java提供了多种库来支持文件的压缩和解压缩,最常用...

    JAVA文件压缩与解压缩实践(源代码+论文).rar

    4. **Deflater与Inflater**:`java.util.zip`包还提供了Deflater和Inflater类,它们分别用于数据压缩和解压缩。Deflater可以与任何输出流结合,将数据压缩成Deflate格式,而Inflater则可以与任何输入流结合,解压缩...

    JAVA文件压缩与解压缩实践(源代码+论文).zip

    4. **Deflater与Inflater**:`Deflater`是用于执行DEFLATE压缩算法的类,而`Inflater`用于解压DEFLATE格式的数据。这两个类可以用于自定义流处理,比如创建一个自定义的压缩流。 5. **文件读写操作**:在进行压缩...

    JAVA开发JAVA文件压缩与解压缩实践(源代码+论文).zip

    在Java编程语言中,文件的压缩与解压缩是常见的任务,尤其在数据传输、存储优化以及备份场景下显得尤为重要。本资源"JAVA开发JAVA文件压缩与解压缩实践(源代码+论文)"提供了一套完整的实践教程,包含了源代码实现和...

    java zlib zip gzip

    与Zip不同,Gzip只能压缩单个文件。在Java中,`java.util.zip.GZIPOutputStream`和`GZIPInputStream`用于Gzip的压缩和解压缩。以下是如何使用Gzip压缩文件的示例: ```java File inputFile = new File("input.txt")...

    JAVA文件压缩与解压缩实践(源代码+文档).zip

    Java文件压缩与解压缩是Java开发中常见的操作,特别是在数据传输、存储优化和备份场景下。本实践项目提供了源代码和相关文档,帮助开发者深入理解并应用这一技术。以下是关于Java文件压缩与解压缩的核心知识点: 1....

    javazip压缩类

    7. **GZIPOutputStream 和 GZIPInputStream**: Java标准库还提供了处理GZIP格式的类,GZIPOutputStream用于压缩数据到GZIP文件,而GZIPInputStream则用于解压缩GZIP文件。虽然GZIP格式不支持多文件压缩,但它们在...

    java做的一个压缩软件

    在Java中,`Deflater`和`Inflater`类用于实现DEFLATE压缩算法,这是ZIP格式所采用的标准。下面将详细介绍如何使用这些类进行文件压缩和解压缩。 1. **文件压缩**: - 创建`Deflater`对象并设置压缩级别(0-9,9为...

    java写的压缩工具类

    2. **Deflater与Inflater**: `Deflater`是用于压缩数据的类,它使用DEFLATE算法(也是ZIP和GZIP文件格式的基础)。而`Inflater`则是用来解压缩数据的,对应的是`Deflater`的逆过程。这两个类可以独立于ZIP格式使用,...

    java实现zip,gzip,7z,zlib格式的压缩打包

    Java 实现文件压缩打包涉及到多个不同的格式,包括 ZIP、GZIP、7Z 和 ZLIB。这些格式各有特点,适用于不同的场景。以下将详细介绍如何利用 Java 原生类和 Apache Commons Compress 库来实现这四种格式的压缩。 1. *...

    JAVA中的deflate压缩实现方法

    解压缩时,先将Base64编码的字符串解码回字节数组,然后调用`uncompress`方法解压缩,最后将解压缩后的数据写回到新的文件`D:\testinflate.txt`。 需要注意的是,`Deflater`和`Inflater`在使用完毕后应调用`end()`...

    毕业设计项目开发-JAVA文件压缩与解压缩实践(源代码+论文).zip

    Java文件压缩与解压缩是软件开发中的一个常见需求,尤其在大数据传输、存储优化和程序打包等场景下显得尤为重要。本项目围绕这个主题展开,旨在为毕业生提供一个实用的编程实践,通过Java语言实现文件的压缩和解压缩...

Global site tag (gtag.js) - Google Analytics