go通过gzip/zip压缩算法压缩[]byte(没有算法只有api应用)

通过gzip解压缩[]byte

//压缩
func GZipBytes(data []byte) []byte{
	var input bytes.Buffer 
	g,_:=gzip.NewWriter(&in) //面向api编程调用压缩算法的一个api 
	//参数就是指向某个数据缓冲区默认压缩等级是DefaultCompression 在这里还有另一个api可以调用调整压缩级别
	//gzip.NewWirterLevel(&in,gzip.BestCompression) NoCompression(对应的int 0)、
	//BestSpeed(1)、DefaultCompression(-1)、HuffmanOnly(-2)BestCompression(9)这几个级别也可以
	//这样写gzip.NewWirterLevel(&in,0)
	//这里的异常返回最好还是处理下,我这里纯属省事
	g.Write(data) 
	g.Close() 
	return input.Bytes() 
}
//解压
func UGZipBytes(data []byte) []byte{
	var out bytes.Buffer
	var in bytes.Buffer
	in.Write(data)
	r,_:=gzip.NewReader(&in)
	r.Close() //这句放在后面也没有问题,不写也没有任何报错
	//机翻注释:关闭关闭读者。它不会关闭底层的io.Reader。为了验证GZIP校验和,读取器必须完全使用,直到io.EOF。

	io.Copy(&out,r)  //这里我看了下源码不是太明白,
	//我个人想法是这样的,Reader本身就是go中表示一个压缩文件的形式,r转化为[]byte就是一个符合压缩文件协议的压缩文件
	
	return out.Bytes()
}

通过zip解压缩[]byte

//这里就不强行解释拉
//zip压缩
func ZipBytes(data []byte) []byte {

	var in bytes.Buffer
	z:=zlib.NewWriter(&in)
	z.Write(data)
	z.Close()
	return  in.Bytes()
}
//zip解压
func UZipBytes(data []byte) []byte  {
	var out bytes.Buffer
	var in bytes.Buffer
	in.Write(data)
	r,_:=zlib.NewReader(&in)
	r.Close()
	io.Copy(&out,r)
	return out.Bytes()
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
7-zip 是一种高效的压缩算法,它能够提供比传统的 ZIP 压缩算法更高的压缩比率和更快的压缩速度。同时,它还支持多种压缩格式,包括 7z、ZIP、RAR、GZIP、TAR 等。 如果你想在 C 语言中使用 7-zip压缩算法,你可以使用 7-zip 的 C SDK。该 SDK 提供了一组 C 语言 API,可以让你在你的程序中使用 7-zip压缩和解压缩功能。 以下是使用 7-zip C SDK 进行压缩的基本步骤: 1. 包含 7-zip C SDK 的头文件。 ``` #include <7z.h> ``` 2. 定义一个结构体来存储压缩参数。 ``` CLzmaEncProps props; LzmaEncProps_Init(&props); props.level = 5; ``` 3. 打开要压缩的文件。 ``` HANDLE inFile = CreateFileA("input.txt", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); ``` 4. 创建一个输出文件。 ``` HANDLE outFile = CreateFileA("output.7z", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); ``` 5. 初始化 7-zip 压缩库。 ``` ISzAlloc alloc = { SzAlloc, SzFree }; CLzmaEncHandle enc; LzmaEnc_Construct(&enc); LzmaEnc_Alloc(&enc, 1024 * 1024, &alloc, &alloc); LzmaEnc_SetProps(&enc, &props); LzmaEnc_WriteProperties(&enc, outFile); ``` 6. 压缩文件。 ``` const int bufferSize = 64 * 1024; Byte inBuffer[bufferSize]; Byte outBuffer[bufferSize]; SZ_RESULT res = SZ_OK; UInt32 inSize = 0; UInt64 outSize = 0; for (;;) { DWORD bytesRead = 0; if (!ReadFile(inFile, inBuffer, bufferSize, &bytesRead, NULL)) { res = SZ_ERROR_READ; break; } if (bytesRead == 0) { break; } inSize += bytesRead; SRes res = LzmaEnc_Encode(&enc, outBuffer, &outSize, inBuffer, bytesRead, LZMA_FINISH_ANY); if (res != SZ_OK) { break; } DWORD bytesWritten = 0; if (!WriteFile(outFile, outBuffer, outSize, &bytesWritten, NULL)) { res = SZ_ERROR_WRITE; break; } } ``` 7. 关闭文件和 7-zip 压缩库。 ``` CloseHandle(inFile); CloseHandle(outFile); LzmaEnc_Destroy(&enc); ``` 这就是使用 7-zip C SDK 进行压缩的基本步骤。你可以根据你的具体需求进行调整和修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值