[压缩]C#下使用SevenZipSharp压缩解压文本
2016-07-13 13:35
501 查看
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# 委托应用总结
- 泛型+反射 List<任意类型>序列化+反序列化
- BloomFilter(布隆过滤器)的C#实现
- csharp: Speech
- C# 同步两个ListBox滚动条
- C# dll文件引入运行包exe中。
- C# 匿名方法
- C#hashtable使用说明 以及 Hashtable和HashMap的区别【总结性】
- C#实现汉字转换为拼音缩写的代码
- c#实体转化
- 断点续传续播的大概原理
- C# 探索c#之Async、Await剖析
- 在C#中使用SerialPort类实现串口通信
- [通信] C#多线程Socket-文件传输
- 反射实现深拷贝
- C# WINFORM判断程序是否运行,且只能运行一个实例
- C#串口SerialPort常用属性方法
- C# string bytes互转
- C#程序代码中常用的快捷键
- c#学习笔记--静态方法和实例方法、方法的重载、操作符的重载