C# deflatestream compress and decompress, compare their respective md5

复制代码
using System;
using System.IO;
using System.IO.Compression;
using System.Security.Cryptography;
using System.Text;


static void Main(string[] args)
        {
            DeflateStreamDemo();
            Console.ReadLine();
        }

        static string fileName = "original.txt";
        static string compressFileName = "compressed.cmp";
        static string decompressFileName = "decompressed.txt";
        static void DeflateStreamDemo()
        {            
            using (FileStream fs = File.Create(fileName))
            {
                StringBuilder builder = new StringBuilder(); 
                for(int i=0;i<10000;i++)
                {
                    builder.AppendLine("Everything depend on myself!");
                    builder.AppendLine("Actions speak lounder than words!");
                    builder.AppendLine("Implement the promise via vision and adamant execution!\n");
                }                
                byte[] bytesData = Encoding.UTF8.GetBytes(builder.ToString());
                fs.Write(bytesData, 0, bytesData.Length);
            }
            CompressFile(fileName);
            DecompressFile(compressFileName);
            ValidateOriginalAndDecompressed();
        }

        private static void CompressFile(string fileName)
        {
            using (FileStream originalStream = File.OpenRead(fileName))
            {
                using (FileStream compressStream = File.Create(compressFileName))
                {
                    using (DeflateStream ds = new DeflateStream(compressStream, CompressionMode.Compress))
                    {
                        originalStream.CopyTo(ds);
                    }
                }
            }
        }

        static void DecompressFile(string compressedFile)
        {
            using(FileStream compressedStream=File.OpenRead(compressedFile))
            {
                using(FileStream decompressStream=File.Create(decompressFileName))
                {
                    using(DeflateStream ds=new DeflateStream(compressedStream, CompressionMode.Decompress))
                    {
                        ds.CopyTo(decompressStream);
                    }
                }
            }
        }

        static void ValidateOriginalAndDecompressed()
        {
            string rawMd5 = string.Empty;
            string decompressMd5 = string.Empty;
            using (StreamReader reader=new StreamReader(fileName))
            {
                string rawText = reader.ReadToEnd();
                rawMd5 = GetStringMd5(rawText);
            }

            using(StreamReader reader=new StreamReader(decompressFileName))
            {
                string decompressedText = reader.ReadToEnd();
                decompressMd5 = GetStringMd5(decompressedText);
            }

            if(string.Equals(rawMd5,decompressMd5))
            {
                Console.WriteLine("The identical!");
            }
            else
            {
                Console.WriteLine("Error!");
            }
        }

        static string GetStringMd5(string str)
        {
            if(string.IsNullOrWhiteSpace(str))
            {
                return null;
            }
            StringBuilder builder = new StringBuilder();     
            
            using(MD5 md5= MD5.Create())
            {
                byte[] rawData = Encoding.UTF8.GetBytes(str);
                byte[] md5Data = md5.ComputeHash(rawData);
                for(int i=0;i<md5Data.Length;i++)
                {
                    builder.Append(md5Data[i].ToString("x2"));
                }
            }
            return builder.ToString();
        }
复制代码

 

posted @   FredGrit  阅读(218)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
历史上的今天:
2019-06-05 C# NPOI Export DataTable C# NPOI导出DataTable 单元格自适应大小
点击右上角即可分享
微信分享提示