String压缩 解压缩

数据传输时,有时需要将数据压缩和解压缩,本例使用GZIPOutputStream/GZIPInputStream实现。

1、使用ISO-8859-1作为中介编码,可以保证准确还原数据

2、字符编码确定时,可以在decompress方法最后一句中显式指定编码

package com.bcxin.business.utils;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;

/**
 * @author suzhida
 * String压缩/解压
 */
public class StringCompress {

	/**
	 * 压缩字符串
	 *
	 * @param str
	 *            压缩的字符串
	 * @return 压缩后的字符串
	 */
	public static String compress(String str) {

		if (StringUtil.isEmpty(str)) {
			return str;
		}

		try {
			ByteArrayOutputStream bos = null;
			GZIPOutputStream os = null; // 使用默认缓冲区大小创建新的输出流
			byte[] bs = null;
			try {
				bos = new ByteArrayOutputStream();
				os = new GZIPOutputStream(bos);
				os.write(str.getBytes()); // 写入输出流
				os.close();
				bos.close();
				bs = bos.toByteArray();
				return new String(bs, "ISO-8859-1"); // 通过解码字节将缓冲区内容转换为字符串
			} finally {
				bs = null;
				bos = null;
				os = null;
			}
		} catch (Exception ex) {
			return str;
		}
	}

	/**
	 * 解压缩字符串
	 *
	 * @param str
	 *            解压缩的字符串
	 * @return 解压后的字符串
	 */
	public static String decompress(String str) {

		if (StringUtil.isEmpty(str)) {
			return str;
		}

		ByteArrayInputStream bis = null;
		ByteArrayOutputStream bos = null;
		GZIPInputStream is = null;
		byte[] buf = null;
		try {
			bis = new ByteArrayInputStream(str.getBytes("ISO-8859-1"));
			bos = new ByteArrayOutputStream();
			is = new GZIPInputStream(bis); // 使用默认缓冲区大小创建新的输入流
			buf = new byte[1024];
			int len = 0;
			while ((len = is.read(buf)) != -1) { // 将未压缩数据读入字节数组
				// 将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此byte数组输出流
				bos.write(buf, 0, len);
			}
			is.close();
			bis.close();
			bos.close();
			return new String(bos.toByteArray()); // 通过解码字节将缓冲区内容转换为字符串
		} catch (Exception ex) {
			return str;
		} finally {
			bis = null;
			bos = null;
			is = null;
			buf = null;
		}
	}

}
时间: 2025-01-16 10:49:24

String压缩 解压缩的相关文章

2016-8-28 压缩解压缩及归档 while脚本

文件管理命令――压缩解压缩及归档基本工具 压缩.解压缩命令 压缩格式:gz, bz2, xz, zip, Z 压缩算法:算法不同,压缩比也会不同: 早期    压缩:        compress(压缩比很小): FILENAME.Z ―― 压缩后的文件名    解压:        uncompress gzip.bzip2.xz只能压缩文件,并且默认压缩完成后删除源文件,zip可以压缩目录 gzip: .gz    gzip /PATH/TO/SOMEFILE:压缩完成后会删除原文件   

基于ICSharpCode.SharpZipLib.Zip的压缩解压缩

今天记压缩解压缩的使用,是基于开源项目ICSharpCode.SharpZipLib.Zip的使用. 一.压缩: /// <summary> /// 压缩 /// </summary> /// <param name="sourceDirectory"></param> /// <param name="targetZipName"></param> /// <param name=&qu

Huffman 压缩解压缩java实现

Huffman编码的原理这里就不说了,网上随处都是.这里来讲讲利用Huffman编码来进行压缩和解压缩的具体实现吧.本工程使用java实现. 编码 1. 流程图 2. 数据结构 CharacterWeight:记录字符值,以及其在待压缩文件中的权重. Class{ char c; //字符值 int weight; //在文件中权重 String code; //其对应huffman编码 } HuffmanNode:huffman树中的节点信息. Class{ Int parent; //父节点

hadoop的压缩解压缩,reduce端join,map端join

hadoop的压缩解压缩 hadoop对于常见的几种压缩算法对于我们的mapreduce都是内置支持,不需要我们关心.经过map之后,数据会产生输出经过shuffle,这个时候的shuffle过程特别需要消耗网络资源,它传输的数据量越少,对作业的运行时间越有意义,在这种情况下,我们可以对输出进行一个压缩.输出压缩之后,reducer就要接收,然后再解压,reducer处理完之后也需要做输出,也可以做压缩.对于我们程序而言,输入的压缩是我们原来的,不是程序决定的,因为输入源就是这样子,reduce

BWT 压缩解压缩算法介绍 poj 1147

poj上1147题, 题意:任意一个长度为N的字符串,循环左移一个字符长度,这样形成N个新字符串,将这N个字符串按字典顺序排序,从上到下取得排序后的每行最后一列的的所有字符,求排序后的第一行字符串? 举个简单例子: 原串为: 0 0 0 1 1 那么循环左移排序后的矩阵为: 0 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 0 0 0 1 1 1 0 0 0 那么我们得到最后列的字符串为: 1 0 0 1 0 现在我们只知道最后列的字符串 1 0 0 1 0,让我们求循环左移排序后

JAVA压缩 解压缩zip 并解决linux下中文乱码

1. [代码][Java]代码   1:再压缩前,要设置linux模式, 需要使用第三方ant-1.6.5.jar  如果是文件目录,则ZipEntry zipEntry=new ZipEntry(basePath + System.getProperties().getProperty("file.separator"));zipEntry.setUnixMode(755);//解决linux乱码 如果是文件,则 ZipEntry zipEntry=new ZipEntry(base

【13】MD5编码、Zlib压缩解压缩

1.MD5加密 1 /// <summary> 2 /// 使用MD5加密算法 3 /// </summary> 4 /// <param name="md5MessageStr">需要加密的字符串</param> 5 /// <returns>加密后返回字符串</returns> 6 public static string GetMD5String(string md5MessageStr) 7 { 8 usi

大数据技术之压缩解压缩案例

7.10 压缩/解压缩案例 7.10.1 对数据流的压缩和解压缩 CompressionCodec有两个方法可以用于轻松地压缩或解压缩数据.要想对正在被写入一个输出流的数据进行压缩,我们可以使用createOutputStream(OutputStreamout)方法创建一个CompressionOutputStream,将其以压缩格式写入底层的流.相反,要想对从输入流读取而来的数据进行解压缩,则调用createInputStream(InputStreamin)函数,从而获得一个Compres

谢烟客---------Linux之压缩解压缩及归档工具的使用

压缩工具 compress/uncompress:  .Z结尾 gzip/gunzip: .gz结尾 bzip2/bunzip2: .bz2结尾 xz/unxz: .xz后缀 压缩及归档工具: zip/unzip 归档工具: tar,cpio(特殊场景) gzip/gunzip/zcat命令 1.LZ77压缩算法 2.压缩比不高:快速.高效 3.压缩/解压缩后删除原文件,为了节约空间 4.纯文本压缩,二进制压缩意义不大 5.压缩目录,-r gzip [OPTIONS...] FILE     -