[压缩]C#下使用SevenZipSharp压缩解压文本
c# 文本 压缩 解压 使用
2023-09-14 08:59:35 时间
using SevenZip; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SLibrary { public class SevenZipUtil { /// <summary> /// 压缩字符串 /// </summary> /// <param name="input">源字符串</param> /// <returns>压缩后字节数组</returns> public static byte[] Compress(string input) { byte[] compressed = null; SevenZipCompressor compressor = new SevenZipCompressor(); compressor.CompressionMethod = CompressionMethod.Ppmd; compressor.CompressionLevel = CompressionLevel.High; using (MemoryStream msin = GetUTF8MemorySteam(input)) { using (MemoryStream msout = new MemoryStream()) { compressor.CompressStream(msin, msout); msout.Position = 0; compressed = new byte[msout.Length]; msout.Read(compressed, 0, compressed.Length); /* Console.WriteLine("compressed: "); foreach (byte b in compressed) { Console.Write(b); Console.Write(" "); } Console.WriteLine(); */ } } return compressed; } /// <summary> /// 获取输入字符串的UTF8编码 /// </summary> /// <param name="input">源字符串</param> /// <returns>内存数据流</returns> private static MemoryStream GetUTF8MemorySteam(string input) { MemoryStream ms = new MemoryStream(); byte[] bytes = Encoding.UTF8.GetBytes(input); ms.Write(bytes, 0, bytes.Length); return ms; } /// <summary> /// 解压字节数组 /// </summary> /// <param name="input">源字节数组</param> /// <returns>解压后字符串</returns> public static string Decompress(byte[] input) { /* Console.WriteLine("input:"); foreach (byte b in input) { Console.Write(b); Console.Write(" "); } Console.WriteLine(); */ byte[] uncompressedbuffer = null; using (MemoryStream msin = new MemoryStream()) { msin.Write(input, 0, input.Length); uncompressedbuffer = new byte[input.Length]; msin.Position = 0; using (SevenZipExtractor extractor = new SevenZipExtractor(msin)) { using (MemoryStream msout = new MemoryStream()) { extractor.ExtractFile(0, msout); msout.Position = 0; uncompressedbuffer = new byte[msout.Length]; msout.Read(uncompressedbuffer, 0, uncompressedbuffer.Length); } } } return Encoding.UTF8.GetString(uncompressedbuffer); } } }
相关文章
- c#委托把方法当成参数
- 《C#高级编程》学习笔记----c#内存管理--栈VS堆
- C#.NET常见问题(FAQ)-如何把文本复制粘贴到文本框的光标位置
- C#.NET常见问题(FAQ)-如何输出带选项的MessageBox,YESNO
- C# FileStream Write追加写入文本
- C# FileStream 按大小分段读取文本内容
- C#开发Windows服务的基础代码
- 重学c#系列——元组的自我见解 [三十一]
- C#设计模式——生成器模式(Builder Pattern)
- [C#基础]说说委托+=和-=的那些事
- C# URL带中文参数的解决办法
- C# FTP上传下载(支持断点续传)
- Atitit. c# 语法新特性 c#2.0 3.0 4.0 4.5 5.0 6.0 attilax总结 1. 版本历史1 1.1. C# 1.0-纯粹的面向对象2 1.2. C# 2.0
- Atitit.jsou html转换纯文本 java c# php
- C# Label显示多行文本及换行(WinForm/WebForm)
- 总结全网C#取随机数方法(整型,浮点型,字符串)
- C# 字符文本中的字符太多