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;
}
}
分享到:
相关推荐
2. **解析视频流**:利用JMF或Xuggler,解析视频流中的每一帧图像,并提取出音频和视频数据。 3. **视频帧处理**:对每一帧图像应用压缩算法。这可能涉及到颜色空间转换、运动估计和补偿、熵编码等步骤。例如,可以...
压缩包内的“用于数据流压缩的huffman算法源代码”很可能是用某种编程语言(如C++、Java或Python)实现的上述步骤。通过阅读源代码,我们可以更深入地理解霍夫曼算法如何应用于数据流压缩,包括如何处理动态数据、...
一、Java数据压缩 1. **GZIPOutputStream与GZIPInputStream** Java标准库中的`java.util.zip`包提供了`GZIPOutputStream`和`GZIPInputStream`类,它们实现了广泛使用的Gzip压缩算法。Gzip是一种高效的压缩格式,...
由于项目需求,需要在C#中压缩,然后在java里解压缩,或者倒过来,在Java里压缩,C#里解压缩,以下代码经测试验证通过。 关键技术点和体会: 压缩的结果采用Base64编码,方便在Java端或者C#端打印出来调试,也方便...
例如,你可以创建一个TMemoryStream对象来装载原始数据,然后通过TZOutputStream将这个内存流压缩到另一个TMemoryStream中。 解压过程与压缩类似,只是使用了不同的类,如TZInputStream。在解压时,你首先读取压缩...
在Java编程语言中,内置了多种压缩和解压缩的方式,如Gzip和Zip。这篇博客“java自带压缩方式的性能比较”可能详细分析了这两种压缩方法的效率和应用场景。通过提供的代码文件`CompressTestMain.java`、`GzipUtils....
在Java编程环境中,压缩数据文件并实现传输功能是一项常见的任务,尤其在网络通信中。这个案例主要涉及了Java的I/O流、压缩技术和网络编程的基本概念。以下是对标题和描述中所涵盖知识点的详细解释: 1. **Java I/O...
2. **流的使用**:Java中的流模型允许数据在不同设备之间流动。在分割大文件时,我们通常会使用`BufferedInputStream`和`BufferedOutputStream`来提高读写效率,减少磁盘I/O操作的次数。 3. **文件分割**:在Java中...
在Java编程语言中,数据压缩是一项重要的技术,用于减少数据的存储空间和提高传输效率。哈夫曼树和完全二叉树是数据压缩中的两种关键数据结构,它们在编码和解码过程中起到至关重要的作用。 首先,让我们了解一下...
在Java编程语言中,文件的压缩与解压缩是常见的数据处理操作,特别是在数据传输、存储优化和备份场景中。本实践项目围绕这个主题展开,包括源代码和相关的论文,为学习者提供了深入理解和应用Java压缩库的机会。以下...
本主题聚焦于“基于Java的数据压缩”,特别是利用哈夫曼树的变种树进行数据编码。以下将深入探讨这一领域的核心概念和实现细节。 哈夫曼编码是一种高效的前缀编码方法,由哈夫曼在1952年提出。它主要用于无损数据...
Java IO流和Zip文件的压缩与解压缩是Java开发中常用的操作,特别是在处理大量数据或者进行文件打包传输时。在本文中,我们将深入探讨如何使用Java标准库中的API来完成这些任务。 首先,让我们理解一下Java IO流的...
例如,我们可以创建一个OutputStream,将数据写入这个流,然后通过GZIPOutputStream进行压缩: ```java File file = new File("data.txt"); FileOutputStream fos = new FileOutputStream(file); GZIPOutputStream ...
每个可能的符号(例如,文本中的字符)被赋予一个概率,这个概率反映了该符号在数据流中出现的频率。 2. **编码过程**:将每个符号转换为与其概率相关的编码范围。高频符号对应更小的编码范围,低频符号则对应更大的...
2. 如何创建ZIP输出流并写入文件数据。 3. 如何读取文件并将其添加到ZIP存档中。 #### 技术背景 在Java中,`java.util.zip`包提供了对ZIP文件格式的支持。该包包含了多个类,如`ZipEntry`、`ZipOutputStream`等,...
- 创建`GZIPOutputStream`,这个流会处理将普通数据压缩成GZ格式的工作。 - 使用缓冲区`byte[] buf`,从`FileInputStream`读取未压缩的数据,并通过`GZIPOutputStream`写入压缩数据。 - 在循环结束后,确保所有...
在Java开发中,通过调用FFmpeg的命令行工具,可以方便地集成到应用程序中进行视频处理,例如本实例中的视频压缩。在百度AI和腾讯AI的活体验证场景中,高质量、低大小的视频文件是必要的,因此使用FFmpeg进行视频压缩...
在Java编程语言中,我们可以利用内置的`java.util.zip`包来实现文件的压缩和解压缩功能。这个包提供了一系列的类,如`ZipOutputStream`用于创建ZIP压缩文件,`ZipInputStream`则用于读取和解压缩ZIP文件。在本教程中...
在Java编程环境中,处理压缩和解压缩任务是常见的需求,特别是在文件操作和数据传输中。本文将详细讲解如何使用Java来解压和压缩tar包,同时解决在处理中文文件名时可能出现的乱码问题,主要关注`javatar-2.5.jar`库...