`
jinyanhui2008
  • 浏览: 319436 次
  • 性别: 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

相关推荐

    java实现视频压缩

    2. **解析视频流**:利用JMF或Xuggler,解析视频流中的每一帧图像,并提取出音频和视频数据。 3. **视频帧处理**:对每一帧图像应用压缩算法。这可能涉及到颜色空间转换、运动估计和补偿、熵编码等步骤。例如,可以...

    用于数据流压缩的huffman算法源代码.rar

    压缩包内的“用于数据流压缩的huffman算法源代码”很可能是用某种编程语言(如C++、Java或Python)实现的上述步骤。通过阅读源代码,我们可以更深入地理解霍夫曼算法如何应用于数据流压缩,包括如何处理动态数据、...

    java数据压缩传输

    一、Java数据压缩 1. **GZIPOutputStream与GZIPInputStream** Java标准库中的`java.util.zip`包提供了`GZIPOutputStream`和`GZIPInputStream`类,它们实现了广泛使用的Gzip压缩算法。Gzip是一种高效的压缩格式,...

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

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

    Delphi 流数据的压缩与解压

    例如,你可以创建一个TMemoryStream对象来装载原始数据,然后通过TZOutputStream将这个内存流压缩到另一个TMemoryStream中。 解压过程与压缩类似,只是使用了不同的类,如TZInputStream。在解压时,你首先读取压缩...

    java自带压缩方式的性能比较

    在Java编程语言中,内置了多种压缩和解压缩的方式,如Gzip和Zip。这篇博客“java自带压缩方式的性能比较”可能详细分析了这两种压缩方法的效率和应用场景。通过提供的代码文件`CompressTestMain.java`、`GzipUtils....

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

    在Java编程环境中,压缩数据文件并实现传输功能是一项常见的任务,尤其在网络通信中。这个案例主要涉及了Java的I/O流、压缩技术和网络编程的基本概念。以下是对标题和描述中所涵盖知识点的详细解释: 1. **Java I/O...

    java文件分割压缩

    2. **流的使用**:Java中的流模型允许数据在不同设备之间流动。在分割大文件时,我们通常会使用`BufferedInputStream`和`BufferedOutputStream`来提高读写效率,减少磁盘I/O操作的次数。 3. **文件分割**:在Java中...

    java 数据压缩的实现示例

    在Java编程语言中,数据压缩是一项重要的技术,用于减少数据的存储空间和提高传输效率。哈夫曼树和完全二叉树是数据压缩中的两种关键数据结构,它们在编码和解码过程中起到至关重要的作用。 首先,让我们了解一下...

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

    在Java编程语言中,文件的压缩与解压缩是常见的数据处理操作,特别是在数据传输、存储优化和备份场景中。本实践项目围绕这个主题展开,包括源代码和相关的论文,为学习者提供了深入理解和应用Java压缩库的机会。以下...

    基于Java的数据压缩

    本主题聚焦于“基于Java的数据压缩”,特别是利用哈夫曼树的变种树进行数据编码。以下将深入探讨这一领域的核心概念和实现细节。 哈夫曼编码是一种高效的前缀编码方法,由哈夫曼在1952年提出。它主要用于无损数据...

    Java IO流 Zip文件的压缩和解压缩

    Java IO流和Zip文件的压缩与解压缩是Java开发中常用的操作,特别是在处理大量数据或者进行文件打包传输时。在本文中,我们将深入探讨如何使用Java标准库中的API来完成这些任务。 首先,让我们理解一下Java IO流的...

    Java数据压缩与传输实例Java源码.

    例如,我们可以创建一个OutputStream,将数据写入这个流,然后通过GZIPOutputStream进行压缩: ```java File file = new File("data.txt"); FileOutputStream fos = new FileOutputStream(file); GZIPOutputStream ...

    算术算法压缩实现Java

    每个可能的符号(例如,文本中的字符)被赋予一个概率,这个概率反映了该符号在数据流中出现的频率。 2. **编码过程**:将每个符号转换为与其概率相关的编码范围。高频符号对应更小的编码范围,低频符号则对应更大的...

    Java把文件压缩成zip

    2. 如何创建ZIP输出流并写入文件数据。 3. 如何读取文件并将其添加到ZIP存档中。 #### 技术背景 在Java中,`java.util.zip`包提供了对ZIP文件格式的支持。该包包含了多个类,如`ZipEntry`、`ZipOutputStream`等,...

    java 解压,压缩linux GZ压缩文件

    - 创建`GZIPOutputStream`,这个流会处理将普通数据压缩成GZ格式的工作。 - 使用缓冲区`byte[] buf`,从`FileInputStream`读取未压缩的数据,并通过`GZIPOutputStream`写入压缩数据。 - 在循环结束后,确保所有...

    ffmpeg压缩java实例

    在Java开发中,通过调用FFmpeg的命令行工具,可以方便地集成到应用程序中进行视频处理,例如本实例中的视频压缩。在百度AI和腾讯AI的活体验证场景中,高质量、低大小的视频文件是必要的,因此使用FFmpeg进行视频压缩...

    (JAVA)利用Java实现zip压缩.解压缩.rar_decompress rar java_zip 压缩

    在Java编程语言中,我们可以利用内置的`java.util.zip`包来实现文件的压缩和解压缩功能。这个包提供了一系列的类,如`ZipOutputStream`用于创建ZIP压缩文件,`ZipInputStream`则用于读取和解压缩ZIP文件。在本教程中...

    java解压和压缩tar包

    在Java编程环境中,处理压缩和解压缩任务是常见的需求,特别是在文件操作和数据传输中。本文将详细讲解如何使用Java来解压和压缩tar包,同时解决在处理中文文件名时可能出现的乱码问题,主要关注`javatar-2.5.jar`库...

Global site tag (gtag.js) - Google Analytics