Gzip压缩与解压

压缩:将指定的原字符串用 gzip 算法压缩,然后以 BASE64 编码

解压:将指定的 BASE64 编码的字符串用 gzip 解压,返回原字符串

原字符串为 UTF-8 编码。

Java 版本

导入包

基本都是 JDK 内置的包,BASE64 部分可能需要替换一下(JDK8 已经自带 BASE64)。

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
import org.apache.commons.codec.binary.Base64;

 

实现部分

/**
* 使用 gzip 进行压缩.
*
* @param str 压缩前的文本
* @return 压缩后的文本(BASE64 编码)
* @throws IOException 如果解压异常
*/
public static String gzip(final String str) throws IOException {
if (str == null || "".equals(str)) {
return str;
}

String ret = null;

byte[] compressed;
ByteArrayOutputStream out = null;
GZIPOutputStream zout = null;
try {
out = new ByteArrayOutputStream();
zout = new GZIPOutputStream(out);
zout.write(str.getBytes());

compressed = out.toByteArray();
ret = new String(Base64.encodeBase64(compressed), "UTF-8");
} finally {
if (zout != null) {
try {
zout.close();
} catch (final IOException e) {
e.printStackTrace();
}
}
if (out != null) {
try {
out.close();
} catch (final IOException e) {
e.printStackTrace();
}
}
}

return ret;
}

/**
* 使用 gzip 进行解压缩.
*
* @param compressedStr 压缩后的文本(BASE64 编码)
* @return 解压后的文本
* @throws IOException 如果解压异常
*/
public static String ungzip(final String compressedStr) throws IOException {
if (null == compressedStr || "".equals(compressedStr)) {
return compressedStr;
}

String ret = null;

ByteArrayOutputStream out = null;
ByteArrayInputStream in = null;
GZIPInputStream zin = null;
try {
final byte[] compressed = Base64.decodeBase64(compressedStr);
out = new ByteArrayOutputStream();
in = new ByteArrayInputStream(compressed);
zin = new GZIPInputStream(in);
final byte[] buffer = new byte[1024];
int offset = -1;
while ((offset = zin.read(buffer)) != -1) {
out.write(buffer, 0, offset);
}

ret = out.toString("UTF-8");
} finally {
if (zin != null) {
try {
zin.close();
} catch (final IOException e) {
e.printStackTrace();
}
}
if (in != null) {
try {
in.close();
} catch (final IOException e) {
e.printStackTrace();
}
}
if (out != null) {
try {
out.close();
} catch (final IOException e) {
e.printStackTrace();
}
}
}

return ret;
}

C# 版本

命名空间

using System;
using System.Text;
using System.IO;
using System.IO.Compression;

实现部分

/// <summary>
/// 使用 gzip 进行压缩
/// </summary>
/// <param name="str">压缩前的文本</param>
/// <returns>压缩后的文本(BASE64 编码)</returns>
public static string gzip(string str)
{
if (null == str || "".Equals(str))
{
return str;
}

byte[] buffer = Encoding.UTF8.GetBytes(str);
MemoryStream ms = new MemoryStream();
using (GZipStream zip = new GZipStream(ms, CompressionMode.Compress, true))
{
zip.Write(buffer, 0, buffer.Length);
}

return Convert.ToBase64String(ms.ToArray());
}

/// <summary>
/// 使用 gzip 进行解压缩
/// </summary>
/// <param name="compressedStr">压缩后的文本(BASE64 编码)</param>
/// <returns>解压后的文本</returns>
public static string ungzip(string compressedStr)
{
if (null == compressedStr || "".Equals(compressedStr))
{
return compressedStr;
}

using (var compressedStream = new MemoryStream(Convert.FromBase64String(compressedStr)))
using (var zipStream = new GZipStream(compressedStream, CompressionMode.Decompress))
using (var resultStream = new MemoryStream())
{
var buffer = new byte[4096 * 2];
int read;

while ((read = zipStream.Read(buffer, 0, buffer.Length)) > 0)
{
resultStream.Write(buffer, 0, read);
}

return Encoding.UTF8.GetString(resultStream.ToArray());
}
}

Unity

如果 C# 版要用在 Unity 上,则需要安装这个免费插件,再将引入的命名空间从 System.IO.Compression 改为 Unity.IO.Compression 即可。

作者:88250
链接:https://hacpai.com/article/1480569906672
来源:黑客派
协议:CC BY-SA 4.0 https://creativecommons.org/licenses/by-sa/4.0/

原文地址:https://www.cnblogs.com/fightingtong/p/11760774.html

时间: 2024-10-15 11:04:55

Gzip压缩与解压的相关文章

golang tar gzip 压缩,解压(含目录文件)

tar是用于文件归档,gzip用于压缩.仅仅用tar的话,达不到压缩的目的.我们常见的tar.gz就是用gzip压缩生成的tar归档文件. go实现tar压缩与解压与zip类似,区别在于tar需要使用gzip进行处理.tar与zip的Header不同.代码如下 package tartest import ( "archive/tar" "compress/gzip" "io" "os" "strings"

Python Gzip压缩与解压模块

from  http://www.iplaypython.com/module/gzip.html 一.使用gzip模块压缩文件 >>> import gzip #导入gzip模块,玩蛇网提示:注意名字为全小写 >>> g = gzip.GzipFile(filename="", mode="wb", compresslevel=9, fileobj=open('sitemap.log.gz', 'wb')) >>&g

Java实现文件压缩与解压[zip格式,gzip格式]

Java实现ZIP的解压与压缩功能基本都是使用了Java的多肽和递归技术,可以对单个文件和任意级联文件夹进行压缩和解压,对于一些初学者来说是个很不错的实例. zip扮演着归档和压缩两个角色:gzip并不将文件归档,仅只是对单个文件进行压缩,所以,在UNIX平台上,命令tar通常用来创建一个档案文件,然后命令gzip来将档案文件压缩. Java I/O类库还收录了一些能读写压缩格式流的类.要想提供压缩功能,只要把它们包在已有的I/O类的外面就行了.这些类不是Reader和Writer,而是Inpu

linux中常用的压缩、解压命令详解

不管在windows中还是在linux中,我们会经常看到各种压缩的文件,此刻我们需要使用就得解压,在这就介绍介绍linux中解压.压缩的命令. 在做实验之前,我们先创建几个文件,大小都是100M,方便我们更能清晰理解. 一.compress[选项]file(不是太常用,而且tab键还不能补齐) ①compress file 压缩文件,其中我们可以看到compress压缩的文件是.Z结尾的压缩包. ② -d file 解压文件,但压缩文件会丢失,相当于uncompress 在这我们可以看到,不管是

Java的压缩、解压及压缩加密、解密解压 例子

为了节约带宽.加快传送速度,http协议支持gzip的压缩,但如果我们的app与后台不是通过http协议通讯的,那么压缩.解压这个流程需要自己写.下面给出compress和decompress的代码: public static byte[] compress(byte[] data) throws Exception { ByteArrayOutputStream baos = new ByteArrayOutputStream(); // 压缩 GZIPOutputStream gos =

linux 打包、压缩、解压

linux下打包.压缩.解压方法: 方法一: ==打包 # tar cvf 123.tar 目录名   将目录打包为123.tar的文件  打包后并不压缩 c--创建  v--详细  f--文件  x--解压  z---对应***.gz ==压缩 # gzip etc1.tar # bzip2 etc2.tar # xz etc3.tar ==解压 # gzip -d etc1.tar.gz # bzip2 -d etc2.tar.bz2 # xz -d etc3.tar.xz ==解包 # t

shell脚本中if与case使用,查找文件locate与find的使用,压缩,解压及归档工具

shell脚本中if与case使用 查找文件locate与find的使用 压缩,解压及归档工具 执行的循序  顺序执行  选择执行  循环执行 条件语句if if只是一个有含义的词,不能单独作为指令使用. 单分支 if 条件判断:then 条件为真的分支代码 fi 双分支 if 判断条件:then 条件为真的分支代码 else 条件为假的分支代码 fi 多分支 if 判断条件1, if-true elif 判断条件2,then if-ture elif 判断条件3,then if-ture ..

linux压缩、解压和归档

1      简介 压缩格式  gz bz2 xz zip Z 压缩算法:算法不同,压缩比也不相同 压缩比:(压缩前的文件大小-压缩后的文件大小)/压缩前的文件大小 文本文件压缩比大,图片视频比较小 xz>bz2>gz2>Z #这个对于大文件生效,小文件未必 常用的压缩解压工具: compress/uncompress .Z (比较老的压缩算法,比较少使用了) gzip/gunzip .gz (不支持目录压缩) bzip2/bunzip2 .bz2不支持目录压缩) xz/unxz .xz

Linux下常用压缩格式的压缩与解压方法

.tar 解包: tar xvf FileName.tar 打包:tar cvf FileName.tar DirName (注:tar是打包,不是压缩!) --------------------------------------------- .gz 解压1:gunzip FileName.gz 解压2:gzip -d FileName.gz 压缩:gzip FileName .tar.gz 解压:tar zxvf FileName.tar.gz 压缩:tar zcvf FileName.