压缩文本、字节或者文件的压缩辅助类-GZipHelper

STM32F030C8烧录实战:用J-Link Commander实现一键批量烧写(附完整脚本) 本文详细介绍了如何使用J-Link Commander工具链实现STM32F030C8的一键批量烧录,包括环境配置、批处理脚本设计、命令脚本解析以及生产环境实战技巧。通过自动化烧录流程,显著提升效率并降低人为错误,特别适合量产和频繁迭代的开发场景。 阅读详情

下面为大家介绍一.NET下辅助公共类GZipHelper,该工具类主要作用是对文本、字符、文件等进行压缩与解压。该类主要使用命名空间:System.IO.Compression下的GZipStream类来实现。  此类表示 GZip 数据格式,它使用无损压缩和解压缩文件的行业标准算法。这种格式包括一个检测数据损坏的循环冗余校验值。GZip 数据格式使用的算法与 DeflateStream 类的算法相同,但它可以扩展以使用其他压缩格式。这种格式可以通过不涉及专利使用权的方式轻松实现。gzip 的格式可以从 RFC 1952“GZIP file format specification 4.3(GZIP 文件格式规范 4.3)GZIP file format specification 4.3(GZIP 文件格式规范 4.3)”中获得。此类不能用于压缩大于 4 GB 的文件。

  一、属性

BaseStream       获取对基础流的引用。 
CanRead        获取一个值,该值指示流是否支持在解压缩文件的过程中读取文件。 (重写 Stream..::.CanRead。) 
CanSeek        获取一个值,该值指示流是否支持查找。 (重写 Stream..::.CanSeek。) 
CanTimeout       获取一个值,该值确定当前流是否可以超时。 (继承自 Stream。) 
CanWrite         获取一个值,该值指示流是否支持写入。 (重写 Stream..::.CanWrite。) 
Length          不支持,并且总是引发 NotSupportedException。 (重写 Stream..::.Length。) 
Position         不支持,并且总是引发 NotSupportedException。 (重写 Stream..::.Position。) 
ReadTimeout       获取或设置一个值(以毫秒为单位),该值确定流在超时前尝试读取多长时间。 (继承自 Stream。) 
WriteTimeout      获取或设置一个值(以毫秒为单位),该值确定流在超时前尝试写入多长时间。 (继承自 Stream。)

二、方法

BeginRead         开始异步读操作。 (重写 Stream..::.BeginRead(array<Byte>[]()[], Int32, Int32, AsyncCallback, Object)。) 
BeginWrite        开始异步写操作。 (重写 Stream..::.BeginWrite(array<Byte>[]()[], Int32, Int32, AsyncCallback, Object)。) 
Close           关闭当前流并释放与之关联的所有资源(如套接字和文件句柄)。 (继承自 Stream。) 
CreateObjRef       创建一个对象,该对象包含生成用于与远程对象进行通信的代理所需的全部相关信息。 (继承自 MarshalByRefObject。) 
Dispose           已重载。 
EndRead           等待挂起的异步读取完成。 (重写 Stream..::.EndRead(IAsyncResult)。) 
EndWrite          处理异步写入的结束。 (重写 Stream..::.EndWrite(IAsyncResult)。) 
Flush            将当前 GZipStream 对象的内部缓冲区的内容刷新到基础流。 (重写 Stream..::.Flush()()()。) 
GetHashCode        用作特定类型的哈希函数。 (继承自 Object。) 
GetLifetimeService     检索控制此实例的生存期策略的当前生存期服务对象。 (继承自 MarshalByRefObject。) 
InitializeLifetimeService  获取控制此实例的生存期策略的生存期服务对象。 (继承自 MarshalByRefObject。) 
MemberwiseClone      已重载。 
Read             将若干解压缩的字节读入指定的字节数组。 (重写 Stream..::.Read(array<Byte>[]()[], Int32, Int32)。) 
ReadByte          从流中读取一个字节,并将流内的位置向前推进一个字节,或者如果已到达流的末尾,则返回 -1。 (继承自 Stream。) 
Seek             此属性不受支持,并且总是引发 NotSupportedException。 (重写 Stream..::.Seek(Int64, SeekOrigin)。) 
SetLength         此属性不受支持,并且总是引发 NotSupportedException。 (重写 Stream..::.SetLength(Int64)。) 
Write            从指定的字节数组中将压缩的字节写入基础流。 (重写 Stream..::.Write(array<Byte>[]()[], Int32, Int32)。) 
WriteByte         将一个字节写入流内的当前位置,并将流内的位置向前推进一个字节。 (继承自 Stream。) 

使用原生的方法进行压缩解压文件实例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/// <summary>
  /// 压缩文件
  /// </summary>
  /// <param name="fileName">文件名(全路径)</param>
  /// <param name="data">需要压缩的字符串</param>
  public  void  CompressFile( string  fileName,  string  data)
  {       
      FileStream fstream =  new  FileStream(fileName, FileMode.Create, FileAccess.Write);
      GZipStream gstream =  new  GZipStream(fstream, CompressionMode.Compress);
      StreamWriter swriter =  new  StreamWriter(gstream);
      swriter.Write(data);
      swriter.Close();
      gstream.Close();
      fstream.Close();
  }<br>
  /// <summary>
  /// 解压缩
  /// </summary>
  /// <param name="fileName">文件名(全路径)</param>
  /// <returns></returns>
  public  string  DecompressFile( string  fileName)
  {
      string  cstring= "" ;
      FileStream fstream =  new  FileStream(fileName, FileMode.Open, FileAccess.Read);
      GZipStream gstream =  new  GZipStream(fstream, CompressionMode.Decompress);
      StreamReader reader =  new  StreamReader(gstream);
      cstring=reader.ReadToEnd();
      reader.Close();
      gstream.Close();
      fstream.Close();
      return  cstring;
  }

  GZipHelper公共类就是以GZipStream类为基础做的对常用解压缩进行的封装。GZipHelper类图如下所示:

 GZipHelper公共类完整源码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
using  System;
using  System.IO;
using  System.IO.Compression;
using  System.Text;
 
namespace  RDIFramework.Utilities
{
     /// <summary>
     /// 压缩文本、字节或者文件的压缩辅助类
     /// </summary>
     public  class  GZipHelper
     {
         /// <summary>
         /// 压缩字符串
         /// </summary>
         /// <param name="text"></param>
         /// <returns></returns>
         public  static  string  Compress( string  text)
         {
             // convert text to bytes
             byte [] buffer = Encoding.UTF8.GetBytes(text);
             // get a stream
             MemoryStream ms =  new  MemoryStream();
             // get ready to zip up our stream
             using  (GZipStream zip =  new  GZipStream(ms, CompressionMode.Compress,  true ))
             {
                 // compress the data into our buffer
                 zip.Write(buffer, 0, buffer.Length);
             }
             // reset our position in compressed stream to the start
             ms.Position = 0;
             // get the compressed data
             byte [] compressed = ms.ToArray();
             ms.Read(compressed, 0, compressed.Length);
             // prepare final data with header that indicates length
             byte [] gzBuffer =  new  byte [compressed.Length + 4];
             //copy compressed data 4 bytes from start of final header
             System.Buffer.BlockCopy(compressed, 0, gzBuffer, 4, compressed.Length);
             // copy header to first 4 bytes
             System.Buffer.BlockCopy(BitConverter.GetBytes(buffer.Length), 0, gzBuffer, 0, 4);
             // convert back to string and return
             return  Convert.ToBase64String(gzBuffer);
         }
 
         /// <summary>
         /// 解压字符串
         /// </summary>
         /// <param name="compressedText"></param>
         /// <returns></returns>
         public  static  string  Uncompress( string  compressedText)
         {
             // get string as bytes
             byte [] gzBuffer = Convert.FromBase64String(compressedText);
             // prepare stream to do uncompression
             MemoryStream ms =  new  MemoryStream();
             // get the length of compressed data
             int  msgLength = BitConverter.ToInt32(gzBuffer, 0);
             // uncompress everything besides the header
             ms.Write(gzBuffer, 4, gzBuffer.Length - 4);
             // prepare final buffer for just uncompressed data
             byte [] buffer =  new  byte [msgLength];
             // reset our position in stream since we're starting over
             ms.Position = 0;
             // unzip the data through stream
             GZipStream zip =  new  GZipStream(ms, CompressionMode.Decompress);
             // do the unzip
             zip.Read(buffer, 0, buffer.Length);
             // convert back to string and return
             return  Encoding.UTF8.GetString(buffer);
         }
 
         public  static  T GZip<T>(Stream stream, CompressionMode mode)  where  T : Stream
         {
             byte [] writeData =  new  byte [4096];
             T ms =  default (T);
             using  (Stream sg =  new  GZipStream(stream, mode))
             {
                 while  ( true )
                 {
                     Array.Clear(writeData, 0, writeData.Length);
                     int  size = sg.Read(writeData, 0, writeData.Length);
                     if  (size > 0)
                     {
                         ms.Write(writeData, 0, size);
                     }
                     else
                     {
                         break ;
                     }
                 }
                 return  ms;
             }
         }
 
         /// <summary>
         /// 压缩字节
         /// </summary>
         /// <param name="bytData"></param>
         /// <returns></returns>
         public  static  byte [] Compress( byte [] bytData)
         {
             using  (MemoryStream stream = GZip<MemoryStream>( new  MemoryStream(bytData), CompressionMode.Compress))
             {
                 return  stream.ToArray();
             }
         }
 
         /// <summary>
         /// 解压字节
         /// </summary>
         /// <param name="bytData"></param>
         /// <returns></returns>
         public  static  byte [] Decompress( byte [] bytData)
         {
             using  (MemoryStream stream = GZip<MemoryStream>( new  MemoryStream(bytData), CompressionMode.Decompress))
             {
                 return  stream.ToArray();
             }
         }
 
         /// <summary>
         /// 压缩文件
         /// </summary>
         /// <param name="sourceFile">源文件</param>
         /// <param name="destinationFile">目标文件</param>
         public  static  void  CompressFile( string  sourceFile,  string  destinationFile)
         {
             if  (File.Exists(sourceFile) ==  false )  //判断文件是否存在
                 throw  new  FileNotFoundException();
             if  (File.Exists(destinationFile) ==  false )  //判断目标文件文件是否存在
                 FileHelper.FileDel(destinationFile);
             //创建文件流和字节数组
             byte [] buffer =  null ;
             FileStream sourceStream =  null ;
             FileStream destinationStream =  null ;
             GZipStream compressedStream =  null ;
             try
             {
                 sourceStream =  new  FileStream(sourceFile, FileMode.Open, FileAccess.Read, FileShare.Read);
                 buffer =  new  byte [sourceStream.Length];
                 //把文件流存放到字节数组中
                 int  checkCounter = sourceStream.Read(buffer, 0, buffer.Length);
                 if  (checkCounter != buffer.Length)
                 {
                     throw  new  ApplicationException();
                 }
                 destinationStream =  new  FileStream(destinationFile, FileMode.OpenOrCreate, FileAccess.Write);
                 //创建GzipStream实例,写入压缩的文件流
                 compressedStream =  new  GZipStream(destinationStream, CompressionMode.Compress,  true );
                 compressedStream.Write(buffer, 0, buffer.Length);
             }
             finally
             {
                 // Make sure we allways close all streams
                 if  (sourceStream !=  null )
                 { sourceStream.Close(); }
                 if  (compressedStream !=  null )
                 { compressedStream.Close(); }
                 if  (destinationStream !=  null )
                 { destinationStream.Close(); }
             }
         }
 
         /// <summary>
         /// 解压文件
         /// </summary>
         /// <param name="sourceFile">源文件</param>
         /// <param name="destinationFile">目标文件</param>
         public  static  void  DecompressFile( string  sourceFile,  string  destinationFile)
         {
             if  (!File.Exists(sourceFile))
             {
                 throw  new  FileNotFoundException();
             }
             FileStream stream =  null ;
             FileStream stream2 =  null ;
             GZipStream stream3 =  null ;
             byte [] buffer =  null ;
             try
             {
                 stream =  new  FileStream(sourceFile, FileMode.Open);
                 stream3 =  new  GZipStream(stream, CompressionMode.Decompress,  true );
                 buffer =  new  byte [4];
                 int  num = (( int )stream.Length) - 4;
                 stream.Position = num;
                 stream.Read(buffer, 0, 4);
                 stream.Position = 0L;
                 byte [] buffer2 =  new  byte [BitConverter.ToInt32(buffer, 0) + 100];
                 int  offset = 0;
                 int  count = 0;
                 while  ( true )
                 {
                     int  num5 = stream3.Read(buffer2, offset, 100);
                     if  (num5 == 0)
                     {
                         break ;
                     }
                     offset += num5;
                     count += num5;
                 }
                 stream2 =  new  FileStream(destinationFile, FileMode.Create);
                 stream2.Write(buffer2, 0, count);
                 stream2.Flush();
             }
             finally
             {
                 if  (stream !=  null )
                 {
                     stream.Close();
                 }
                 if  (stream3 !=  null )
                 {
                     stream3.Close();
                 }
                 if  (stream2 !=  null )
                 {
                     stream2.Close();
                 }
             }
         }
     }
}
Linux----Ubuntu系统官网下载iso镜像文件 阅读详情

相关推荐

AI+AB测试提升电商主图点击率实战指南

在电商运营中,主图点击率(CTR)是衡量商品吸引力的核心指标,直接影响转化率和订单增长。通过AI技术批量生成高质量主图素材,结合数据驱动的AB测试方法,可以显著提升点击率。AI工具如MidJourney和Stable Diffusion能够快速生成多样化视觉方案,而自动化处理流水线则确保素材规格统一。AB测试体系通过多维变量控制和流量分配策略,科学验证不同素材效果。这种方法特别适用于需要快速迭代的电商场景,某女装店铺案例显示CTR从1.2%提升至3.8%,验证了AI+数据协同优化的技术价值。

weixin_29058331的博客 298

压缩文本、字节或者文件的压缩辅助类-GZipHelper 欢迎收藏

压缩文本、字节或者文件的压缩辅助类-GZipHelper 欢迎收藏   下面为大家介绍一.NET下辅助公共类GZipHelper,该工具类主要作用是对文本、字符、文件等进行压缩与解压。该类主要使用命名空间:System.IO.Compression下的GZipStream类来实现。  此类表示 GZip 数据格式,它使用无损压缩和解压缩文件的行业标准算法。这种格式包括一个检测数据损坏的循环冗余校...

weixin_33671935的博客 233

K8S证书过期解决办法之替换证书

k8s证书过期解决方案之替换证书

q_hsolucky的博客 1万+

zlib 压缩目录_gz格式压缩文件操作:gzip

本文约1050字,建议阅读时间4~6分钟关键字:python,tar.gz,压缩文件,gzipgz压缩格式在Linux系统中比较常见,而gzip模块主要用于由gzip和gunzip程序压缩地.gz格式文件的操作,其中数据压缩是由zlib模块提供的。gzip模块提供了GzipFile类及其方法可以很方便地对其进行操作。1、公共方法(1)压缩数据data=b'1,2,a,b'gzip.com...

weixin_39609670的博客 571

稳健自适应波束形成学习(2):自适应计算对角加载量方法——基于广义线性组合的鲁棒Capon波束形成

对于快拍数相对阵元数较小时,样本协方差矩阵不能很好对协方差矩阵进行估计。常规的对角加载量需要根据经验值或不断手动调整进行测试,没有一个明确的准则和推导。该篇介绍一种自适应计算对角加载量的方法,且能适应快拍数相对阵元数较小时的情况。均匀线阵阵元数:18;载波频率30MHz;通信信号来波方向0°、来波估计偏差0.5°;干扰来波方向30°;通信信号信噪比10dB;干扰信号信噪比60dB。也即在干扰角度生成66dB的零陷,通信信号受到16dB的衰减。

a1uajug的博客 824

超详细 Git创建仓库及上传项目至Github操作(Windows系统)

文章目录前言一、Git下载及安装二、创建代码仓库1.配置身份2.创建本地仓库3.提交本地代码三、使用Git上传代码至Github1.创建ssh keys2.在Github中新建仓库3.关联本地仓库与Github仓库4.推送代码至Github仓库总结 前言 本文对于Windows系统上git的安装及基本使用方法进行简单介绍,并介绍如何使用git将仓库中的项目上传至个人的Github中去。内容参考《第一行代码》以及一些博客。 本文适合新手阅读哦~ 一、Git下载及安装 打开网站 git下载 下载安装包(直接

lijianyi0219的博客 2万+

.NET Core 中的字符串压缩方法

在.NET Core(以及更广泛的.NET平台)中,并没有直接称为“字符串压缩功能”的内置功能,因为字符串压缩通常指的是减少字符串在内存或存储中占用空间的过程。然而,.NET Core 提供了多种方法和技术,可以间接地实现字符串的压缩或优化。

学习和分享 731

MAS1102量产工具实战指南:从下载到开卡,附固件选择与RDT优化技巧

本文提供MAS1102量产工具的实战指南,涵盖从工具下载、短接识别到开卡操作的全过程。重点解析了固件选择策略与RDT优化技巧,帮助用户成功修复基于联芸MAS1102主控的固态硬盘,解决常见开卡错误并提升SSD性能与稳定性。

c2d3e4f的博客 2194

基于Gzip的压缩解压缩帮助类

public class MsgCompressHelper { public static byte[] Compress(string str, Encoding encoding) { return Compress(ConvertStringToBytes(str, encoding));

jswxharry的专栏 632

MinIO vs 华为云OBS:成本、性能与兼容性深度对比(含实测数据)

本文深度对比了开源对象存储MinIO与华为云OBS在成本、性能、兼容性及运维方面的核心差异。通过实测数据与全生命周期成本分析,为技术决策者提供选型依据。文章指出,MinIO在长期成本控制、性能深度优化及S3 API兼容性方面优势显著,而华为云OBS则提供开箱即用的便利性。

kmeans3miner的博客 593

计算机毕设:线性回归 Xgboost LSTM 预测黄金价格实战 完整代码数据视频讲解 可直接运行

线性回归 Xgboost LSTM 预测黄金价格实战 完整代码数据视频讲解 可直接运行

1760

字符串:压缩

    给定一个字符串,对字符串进行压缩,返回压缩后的长度,并把压缩后的字符存入原字符串的前面部分。如字符串['a', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'c', 'c', 'd'],压缩后的结果为ab12c2d,返回长度为7,把压缩结果存入原字符串后的结果为ab12c2dbbbbbbccd。 public...

Peanut 大本营 489

《QGIS快速入门与应用基础》009:国内镜像源(清华大学/阿里云)下载技巧

针对国内用户下载QGIS速度慢、易中断的问题,推荐使用清华大学和阿里云两大国内镜像源,提供3-10MB/s的极速下载方案。详细解析镜像源核心优势、分步骤下载指南及校验方法,对比清华(同步快、北方优选)与阿里云(南方节点多)的特点。针对常见问题如版本延迟、404错误等提供解决方案,并介绍搭配IDM等工具实现多线程加速的进阶技巧。通过镜像源+下载工具组合,用户可高效获取QGIS安装包,为后续系统安装奠定基础。

LuckyHanMo的博客 1733

压缩文本、字节或者文件的压缩辅助类

using System; using System.Collections.Generic; using System.Text; using System.Diagnostics; using System.IO; using Microsoft.Win32; using System.IO.Compression; using System.Runtime.Ser...

156

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

GZip 压缩及解压缩

/// <summary> /// GZipHelper /// </summary> public class GZipHelper { /// <summary> /// 将传入字符串以GZip算法压缩后,返回Base64编码字符 /// </summary> //...

weixin_30817749的博客 135

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

GZIP压缩解压类

当我们客户端与服务端进行数据传输时需要走流量,为了节省流量我们常常需要写一个压缩类对数据进行压缩。 [java] view plain copy  print? import java.io.ByteArrayInputStream;   import java.io.ByteArrayOutputStream;   import ja

qq_34425418的博客 339

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

GZipStream压缩和解压缩方法

using System;using System.Collections.Generic;using System.Text;using System.IO;using System.IO.Compression;//使用压缩类 class Test{staticvoid SaveCompressedFile(string filename, string data) {//创建一个 FileS

jking1989的专栏 1217

压缩打包介绍 、gzip压缩工具、 bzip2压缩工具 、xz压缩工具

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33971130的博客 279

关于Gzip压缩js文件提高网站运行速度

关于Gzip压缩js文件提高网站运行速度     一、为什么要压缩Js文件? :我们要知道一个服务器在响应客户端请求的效率上,很大一部分取决于界面所需的css、js等文件的大小以及数量。那么对于这些可编辑文件进行压缩,便能够很好的提高 服务器响应客户端请求的效率,从而达到优化的效果。   二 、为什么要使用GZIP? :Gzip是一个非常成熟的文件压缩工具,且客户端浏览器能够...

PerfectPlan 462

Unity-ZipHelper类封装

Reference DLL ICSharpCode.SharpZipLib.dll Usage // 只能在Unity的 Coroutine内调用哦 StartCoroutine(_Coroutine()); private IEnumerator _Coroutine() { Debug.Log(&amp;quot;uncompress enter...&amp;quot;); var zipFile...

Jave.Lin 的学习笔记 734
上一篇: C#禁止重复提交
下一篇: 微信收货地址共享开发接口讲解
make1828
博客等级 码龄19年 60粉丝 105原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值