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;
}
}
分享到:
相关推荐
由于项目需求,需要在C#中压缩,然后在java里解压缩,或者倒过来,在Java里压缩,C#里解压缩,以下代码经测试验证通过。 关键技术点和体会: 压缩的结果采用Base64编码,方便在Java端或者C#端打印出来调试,也方便...
Java压缩数据文件并实现传输功能,实例化套接字,在命令窗口输出提示信息,输出客户机地址,得到输出流 ,压缩输出流,设定缓冲区大小,读取数据,写入数据到文件,关闭输出流,关闭套接字。
Java 1.1实现了I/O数据流与网络数据流的单一接口,因此数据的压缩、网络传输和解 压缩的实现比较容易,下面介绍利用ZipEntry、ZipInputStream和ZipOutputStream三个Java 类实现zip数据压缩方式的编程方法。 ...
G.721算法的java实现。该算法用于语音压缩,压缩比为4:1。可以将16bit,8k/s采样的语音流压缩成32kbps的数据流。
一个Java随书实例:用GZIP压缩解压文件,从源文件得到文件输入流,得到目标文件输出流,得到压缩输出流,设定读入缓冲区尺寸,弹出文件选择器,并判断是否点击了打开按钮,判断事件来自于哪个按钮,用于选择解压和...
4,设置固实压缩(将待压缩文件当作连串的数据流进行压缩,零散文件较多时推荐开启) 5,压缩后的文件中是否保留文件夹层级关系(默认保留) 6,压缩后是否删除源文件(默认不删除) 注:由于WinRAR控制台模式不支持定义压缩...
/** * 方法重载: * 压缩图片,将图片压缩后以二进制的形式输出 * * @param file * 将要压缩的图片 * @param width * 压缩宽(长度短的做宽) * @param height ... * @return byte[]二进制流 */
Java Zip算法压缩多个文件的例子,具体的实现原理是:先打开文件并读取,然后利用ZipEntry实例化待压缩的条目列表,将ZIP条目列表写入输出流,从源文件得到文件输入流,写入缓冲数据等。相关代码: ...
压缩模块要完成的就是将文件读入以后进行压缩,再将压缩后的数据写入一个新的文件,其部分代码如下: public class gzip { public static void main(String[] args) { if (args.length !=2) { System.out....
Delphi2007 敲的。 只是对流的压缩和解压,和Winrar无任何关系。
Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等
目前项目有一个需求“数据的离线导入导出”,需要将数据分模块导入到不同的excel,然后压缩成数据包下载
Java文件压缩与解压缩实践广泛应用于文件备份、数据传输、打包软件、日志管理等各个领域。 在网络传输中,可以将多个文件打包成一个压缩文件进行传输,减少传输时间和网络带宽的消耗。 在软件开发中,可以将项目源...
第一个软件,传输流/文件的压缩,利用Internet中惯常使用的gzip, deflate算法,可以和sun java的GZipInputStream和GZipOutputStream互操作 第二个软件,基于HTTP的压缩传输软件,可完全和IE的VBScript和...
Java 1.1实现了I/O数据流与网络数据流的单一接口,因此数据的压缩、网络传输和解压缩的实现比较容易,本文介绍利用ZipEntry、 ZipInputStream和ZipOutputStream三个Java 类实现zip数据压缩方式的编程方法。
摘要:Java源码,文件操作,数据压缩,文件传输 Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出...
JDK环境中提供了多种类型的数据压缩方式,总结起来,利用Java语言可以创建的数据文件压缩格式包括如下类型: ●ZIP格式 ●GZIP格式 ●JAR格式 通过设计,允许创建ZIP压缩文件,并对ZIP压缩文件中包含的...
主要介绍了java IO数据操作流、对象序列化、压缩流代码解析,具有一定借鉴价值,需要的朋友可以参考下
Java 1.1实现了I/O数据流与网络数据流的单一接口,因此数据的压缩、网络传输和解 压缩的实现比较容易,下面介绍利用ZipEntry、ZipInputStream和ZipOutputStream三个Java 类实现zip数据压缩方式的编程方法。 zip压缩...
Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...