`
jinyanhui2008
  • 浏览: 312143 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

java数据流压缩

    博客分类:
  • Java
阅读更多
package com.wfy.util;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;

public class DataCompression {
	/**
	 * 压缩字符串为 byte[] 储存可以使用new sun.misc.BASE64Encoder().encodeBuffer(byte[] b)方法
	 * 保存为字符串
	 * 
	 * @param str
	 *            压缩前的文本
	 * @return
	 */
	public static final byte[] compress(Object obj) {
		System.out.println("压缩字节开始:" + TimeUtil.dateTime1());
		if (obj == null)
			return null;

		byte[] compressed;
		ByteArrayOutputStream out = null;
		ZipOutputStream zout = null;

		try {
			out = new ByteArrayOutputStream();
			zout = new ZipOutputStream(out);
			zout.putNextEntry(new ZipEntry("0"));
			ByteArrayOutputStream out1 = new ByteArrayOutputStream();
			ObjectOutputStream oos = new ObjectOutputStream(out1);
			oos.writeObject(obj);
			byte[] bytes = out1.toByteArray();
			zout.write(bytes);
			zout.closeEntry();
			compressed = out.toByteArray();
		} catch (IOException e) {
			e.printStackTrace();
			compressed = null;
		} finally {
			if (zout != null) {
				try {
					zout.close();
				} catch (IOException e) {
				}
			}
			if (out != null) {
				try {
					out.close();
				} catch (IOException e) {
				}
			}
		}
		System.out.println("压缩字节结束:" + TimeUtil.dateTime1());
		return compressed;
	}

	/**
	 * 将压缩后的 byte[] 数据解压缩
	 * 
	 * @param compressed
	 *            压缩后的 byte[] 数据
	 * @return 解压后的字符串
	 * @throws ClassNotFoundException 
	 */
	public static final Object decompress(byte[] compressed) {
		System.out.println("解压字节开始:" + TimeUtil.dateTime1());
		if (compressed == null)
			return null;

		ByteArrayOutputStream out = null;
		ByteArrayInputStream in = null;
		ZipInputStream zin = null;
		Object decompressed;
		try {
			out = new ByteArrayOutputStream();
			in = new ByteArrayInputStream(compressed);
			zin = new ZipInputStream(in);
			ZipEntry entry = zin.getNextEntry();
			byte[] buffer = new byte[1024];
			int offset = -1;
			while ((offset = zin.read(buffer)) != -1) {
				out.write(buffer, 0, offset);
			}
			
			ByteArrayInputStream in1 = new ByteArrayInputStream(out.toByteArray());
			ObjectInputStream ois = new ObjectInputStream(in1);
			decompressed = ois.readObject();
		} catch (Exception e) {
			e.printStackTrace();
			decompressed = null;
		} finally {
			if (zin != null) {
				try {
					zin.close();
				} catch (IOException e) {
				}
			}
			if (in != null) {
				try {
					in.close();
				} catch (IOException e) {
				}
			}
			if (out != null) {
				try {
					out.close();
				} catch (IOException e) {
				}
			}
		}
		System.out.println("解压字节结束:" + TimeUtil.dateTime1());
		return decompressed;
	}
}

 

3
1
分享到:
评论
2 楼 JasonShieh 2011-04-08  
测试了一下,发现越压缩越大。93个字节压到135个字节,不知道是不是我哪里搞错了
1 楼 fllbai 2010-04-05  
这正是我需要的,thanks

相关推荐

    C#、java 字符流跨平台数据解压缩

    由于项目需求,需要在C#中压缩,然后在java里解压缩,或者倒过来,在Java里压缩,C#里解压缩,以下代码经测试验证通过。 关键技术点和体会: 压缩的结果采用Base64编码,方便在Java端或者C#端打印出来调试,也方便...

    Java压缩数据文件并实现传输功能.rar

    Java压缩数据文件并实现传输功能,实例化套接字,在命令窗口输出提示信息,输出客户机地址,得到输出流 ,压缩输出流,设定缓冲区大小,读取数据,写入数据到文件,关闭输出流,关闭套接字。

    java 压缩类的用法

     Java 1.1实现了I/O数据流与网络数据流的单一接口,因此数据的压缩、网络传输和解 压缩的实现比较容易,下面介绍利用ZipEntry、ZipInputStream和ZipOutputStream三个Java 类实现zip数据压缩方式的编程方法。  ...

    G.721语音压缩算法的java实现

    G.721算法的java实现。该算法用于语音压缩,压缩比为4:1。可以将16bit,8k/s采样的语音流压缩成32kbps的数据流。

    Java用GZIP压缩解压文件.rar

    一个Java随书实例:用GZIP压缩解压文件,从源文件得到文件输入流,得到目标文件输出流,得到压缩输出流,设定读入缓冲区尺寸,弹出文件选择器,并判断是否点击了打开按钮,判断事件来自于哪个按钮,用于选择解压和...

    java 基于WinRAR6.02封装的压缩及分卷压缩工具

    4,设置固实压缩(将待压缩文件当作连串的数据流进行压缩,零散文件较多时推荐开启) 5,压缩后的文件中是否保留文件夹层级关系(默认保留) 6,压缩后是否删除源文件(默认不删除) 注:由于WinRAR控制台模式不支持定义压缩...

    图片压缩(java)将图片压缩后以二进制的形式输出

    /** * 方法重载: * 压缩图片,将图片压缩后以二进制的形式输出 * * @param file * 将要压缩的图片 * @param width * 压缩宽(长度短的做宽) * @param height ... * @return byte[]二进制流 */

    Java Zip算法压缩多个文件的例子.rar

    Java Zip算法压缩多个文件的例子,具体的实现原理是:先打开文件并读取,然后利用ZipEntry实例化待压缩的条目列表,将ZIP条目列表写入输出流,从源文件得到文件输入流,写入缓冲数据等。相关代码:  ...

    JAVA文件压缩与解压缩实践.doc

    压缩模块要完成的就是将文件读入以后进行压缩,再将压缩后的数据写入一个新的文件,其部分代码如下: public class gzip { public static void main(String[] args) { if (args.length !=2) { System.out....

    Delphi 流数据的压缩与解压

    Delphi2007 敲的。 只是对流的压缩和解压,和Winrar无任何关系。

    数据压缩与传输_java_throwc4v_

    Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等

    java将数据导入多个excel并压缩,亲测可用

    目前项目有一个需求“数据的离线导入导出”,需要将数据分模块导入到不同的excel,然后压缩成数据包下载

    JAVA文件压缩与解压缩实践的实现.rar

    Java文件压缩与解压缩实践广泛应用于文件备份、数据传输、打包软件、日志管理等各个领域。 在网络传输中,可以将多个文件打包成一个压缩文件进行传输,减少传输时间和网络带宽的消耗。 在软件开发中,可以将项目源...

    GZip流压缩&Web流压缩组件

     第一个软件,传输流/文件的压缩,利用Internet中惯常使用的gzip, deflate算法,可以和sun java的GZipInputStream和GZipOutputStream互操作  第二个软件,基于HTTP的压缩传输软件,可完全和IE的VBScript和...

    利用Java实现zip压缩解压缩

    Java 1.1实现了I/O数据流与网络数据流的单一接口,因此数据的压缩、网络传输和解压缩的实现比较容易,本文介绍利用ZipEntry、 ZipInputStream和ZipOutputStream三个Java 类实现zip数据压缩方式的编程方法。

    Java数据压缩与传输实例

    摘要:Java源码,文件操作,数据压缩,文件传输 Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出...

    ZIP格式压缩/解压系统设计(JAVA)

    JDK环境中提供了多种类型的数据压缩方式,总结起来,利用Java语言可以创建的数据文件压缩格式包括如下类型:  ●ZIP格式  ●GZIP格式  ●JAR格式 通过设计,允许创建ZIP压缩文件,并对ZIP压缩文件中包含的...

    java IO数据操作流、对象序列化、压缩流代码解析

    主要介绍了java IO数据操作流、对象序列化、压缩流代码解析,具有一定借鉴价值,需要的朋友可以参考下

    利用Java实现zip压缩/解压缩

    Java 1.1实现了I/O数据流与网络数据流的单一接口,因此数据的压缩、网络传输和解 压缩的实现比较容易,下面介绍利用ZipEntry、ZipInputStream和ZipOutputStream三个Java 类实现zip数据压缩方式的编程方法。 zip压缩...

    java源码包---java 源码 大量 实例

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

Global site tag (gtag.js) - Google Analytics