Java解压缩技术(二)GZIP压缩-解压缩(
来源:互联网 发布:工资待遇好 软件开发 编辑:程序博客网 时间:2024/06/06 09:06
Java解压缩技术的实现 GZIP ZIP BZIP2
没啥好说的,都是些文件IO操作
package com.ljh.gzip;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.util.zip.GZIPInputStream;import java.util.zip.GZIPOutputStream;/** * @Desc: GZIP 压缩工具(数据压缩建议使用,支持单文件压缩) * 要压缩文件夹请参考ZipUtils类 * Tips:GZIP也可以采用Apache开源的Commons-Compress.jar的实现 * @author ljh * @date 2015-4-14 上午9:39:14 */public class GZipUtils {private static final int BUFFER = 1024;public static final String EXT = ".gz";/** * @Description: GZIP 数据压缩 * @author (ljh) @date 2015-4-13 下午6:00:52 * @param data * @return * @throws IOException * @return byte[] */public static byte[] compress(byte[] data) throws IOException {ByteArrayInputStream bais = new ByteArrayInputStream(data);ByteArrayOutputStream baos = new ByteArrayOutputStream();compress(bais, baos);// 输入流压缩到输出流baos.flush();baos.close();bais.close();return baos.toByteArray();}/** * @Description: GZIP 数据压缩 * @author (ljh) @date 2015-4-14 上午9:26:30 * @param is * @param os * @throws IOException * @return void */public static void compress(InputStream is, OutputStream os) throws IOException {GZIPOutputStream gzipOS = new GZIPOutputStream(os, 1024);int count;byte data[] = new byte[BUFFER];while ((count = is.read(data, 0, data.length)) != -1) {gzipOS.write(data, 0, count);}gzipOS.finish();gzipOS.flush();gzipOS.close();}/** * @Description: GZIP 数据解压缩 * @author (ljh) @date 2015-4-13 下午6:00:42 * @param data * @return * @throws IOException * @return byte[] */public static byte[] uncompress(byte[] data) throws IOException {ByteArrayInputStream bais = new ByteArrayInputStream(data);ByteArrayOutputStream baos = new ByteArrayOutputStream(BUFFER);uncompress(bais, baos);baos.flush();baos.close();bais.close();return baos.toByteArray();}/** * @Description: GZIP 数据解压缩 * @author (ljh) @date 2015-4-14 上午9:26:51 * @param is * @param os * @throws IOException * @return void */private static void uncompress(InputStream is, OutputStream os) throws IOException {GZIPInputStream gzipIS = new GZIPInputStream(is);int count;byte data[] = new byte[BUFFER];while ((count = gzipIS.read(data, 0, data.length)) != -1) {os.write(data, 0, count);}gzipIS.close();}/** * @Description: 文件压缩 * @author (ljh) @date 2015-4-14 上午9:28:46 * @param file * @throws Exception * @return void */public static void compress(File file) throws IOException {compress(file, true);}/** * @Description: 文件压缩 * @author (ljh) @date 2015-4-14 上午9:29:21 * @param file * @param delete * 是否删除源文件 * @throws Exception * @return void * @throws IOException */public static void compress(File file, boolean delete) throws IOException {if (!file.exists()) {// 文件不存在}FileInputStream fis = new FileInputStream(file);FileOutputStream fos = new FileOutputStream(file.getPath() + EXT);compress(fis, fos);fis.close();fos.flush();fos.close();if (delete) {file.delete();}}/** * @Description: 文件压缩 * @author (ljh) @date 2015-4-14 上午9:32:52 * @param path * 源文件路径 * @throws Exception * @return void */public static void compress(String path) throws IOException {compress(path, true);}/** * @Description: 文件压缩 * @author (ljh) @date 2015-4-14 上午9:33:18 * @param path * 源文件路径 * @param delete * 是否删除源文件 * @throws Exception * @return void * @throws IOException */public static void compress(String path, boolean delete) throws IOException {File file = new File(path);compress(file, delete);}/** * @Description: 文件解压缩 * @author (ljh) @date 2015-4-14 上午9:35:03 * @param file * @throws Exception * @return void */public static void uncompress(File file) throws IOException {uncompress(file, true);}/** * @Description: 文件解压缩 * @author (ljh) @date 2015-4-14 上午9:35:44 * @param file * @param delete * 是否删除源文件 * @throws Exception * @return void * @throws IOException */public static void uncompress(File file, boolean delete) throws IOException {if (!file.exists()) {// 文件不存在}FileInputStream fis = new FileInputStream(file);FileOutputStream fos = new FileOutputStream(file.getPath().replace(EXT, ""));uncompress(fis, fos);fis.close();fos.flush();fos.close();if (delete) {file.delete();}}/** * @Description: 文件解压缩 * @author (ljh) @date 2015-4-14 上午9:37:48 * @param path * @throws Exception * @return void */public static void uncompress(String path) throws IOException {uncompress(path, true);}/** * @Description: 文件解压缩 * @author (ljh) @date 2015-4-14 上午9:38:03 * @param path * @param delete * 是否删除源文件 * @throws Exception * @return void */public static void uncompress(String path, boolean delete) throws IOException {File file = new File(path);uncompress(file, delete);}}
测试代码:
/** * @Description: 中文150字节压缩比较明显,英文50字节压缩比较明显 * @author (ljh) @date 2015-4-14 上午11:37:37 * @throws IOException * @return void *///@org.junit.Testpublic void testGZIP() throws IOException {byte[] bytes = "阿莱克斯大家噶拉卡死机的个啊了的卡死机格拉卡死机的了感觉打开上岙地沟阿萨德gas的歌撒的歌第三个滴答滴答滴答滴答滴答滴答滴答".getBytes();// 对bytes压缩// 验证一下压缩后的效果对比System.out.println("压缩前:");System.out.println(bytes.length);for (byte b : bytes) {System.out.print(b + " ");}System.out.println();System.out.println("压缩后:");byte[] bytes2 = GZipUtils.compress(bytes);System.out.println(bytes2.length);for (byte b : bytes2) {System.out.print(b + " ");}System.out.println();System.out.println("解压缩后:"); byte[] byte22 = GZipUtils.uncompress(bytes2); System.out.println(byte22.length); for (byte b : byte22) { System.out.print(b+" ");} //GZIP工具// GZipUtils.compress("F:\\Activity_win9.bmp", false);//被压缩文件是一个12M的bmp文件,压缩后大小为1.2M// GZipUtils.uncompress("F:\\Activity_win9.bmp.gz", false);//解压缩后与源文件相同 }
点我下载相关源码
0 0
- Java解压缩技术(二)GZIP压缩-解压缩(
- java Gzip 压缩与解压缩
- java Gzip 压缩与解压缩
- Java解压缩技术(一)ZIP压缩-解压缩
- Java解压缩技术(三)BZIP2压缩-解压缩
- Gzip压缩解压缩
- php gzip压缩解压缩
- gzip压缩解压缩数据
- JAVA字符串的GZIP压缩解压缩方法
- JAVA字符串的GZIP压缩解压缩方法
- JAVA字符串的GZIP压缩解压缩方法
- Java GZip解压缩
- Zip压缩、解压缩方法(GZip)
- GZip压缩解压缩工具类
- GZIP/ZIP压缩与解压缩
- java对象序列化、gzip压缩解压缩、加密解密
- Java文件压缩与解压缩(二)
- 利用Java实现压缩与解压缩(zip、gzip)支持中文路径
- 矩阵的空间变换
- leetcode 24 Swap Nodes in Pairs
- 浅谈 Qt 布局管理器 如何让控件随着窗口变化
- Hashcode的作用
- 网站总结
- Java解压缩技术(二)GZIP压缩-解压缩(
- 步步为营_Android开发课[29]_用户界面之SeekBar(拖动条)
- 欢迎使用CSDN-markdown编辑器
- 什么是企业号?
- Android调用系统相机拍照,并且模仿实现水印相机简单功能
- Spring 的优秀工具类盘点,第 2 部分: 特殊字符转义和方法入参检测工具类
- exists 与 in
- 黑马程序员----OC Foundation框架--结构体、NSString
- 用Ubuntu SDK创建Currency Converter (视频)