c# 序列压缩、反序列解压缩对象并保存文件

简介:

public object DeCompress(string fileName)
        {
            object obj = null;
            try
            {
                using (Stream source = File.OpenRead(fileName))
                {
                    using (Stream destination = new MemoryStream())
                    {
                        using (GZipStream input = new GZipStream(source, CompressionMode.Decompress, true))
                        {
                            byte[] bytes = new byte[4096];
                            int n;
                            while ((n = input.Read(bytes, 0, bytes.Length)) != 0)
                            {
                                destination.Write(bytes, 0, n);
                            }
                        }
                        destination.Flush();
                        destination.Position = 0;
                        BinaryFormatter b = new BinaryFormatter();
                        obj = (object)b.Deserialize(destination);
                    }
                }
            }
            catch
            { }
            return obj;
        }
        private void CreateCompressFile(object obj, string fileName)
        {
            try
            {
                BinaryFormatter formatter = new BinaryFormatter();
                using (Stream source = new MemoryStream())
                {
                    formatter.Serialize(source, obj);
                    source.Position = 0;
                    using (Stream destination = new FileStream(fileName, FileMode.Append, FileAccess.Write))
                    {
                        using (GZipStream output = new GZipStream(destination, CompressionMode.Compress))
                        {
                            byte[] bytes = new byte[4096];
                            int n;
                            while ((n = source.Read(bytes, 0, bytes.Length)) != 0)
                            {
                                output.Write(bytes, 0, n);
                            }
                        }
                    }
                }
            }
            catch
            { }
        }

 

测试:

public void test()
        {
            string fileName = AppDomain.CurrentDomain.BaseDirectory.Trim() + "test.dat";
            Dictionary<string, int> dic = new Dictionary<string, int>();
            dic.Add("a", 1);
            dic.Add("b", 2);
            dic.Add("c", 3);
            dic.Add("d", 4);
            dic.Add("e", 5);
            dic.Add("f", 6);
            CreateCompressFile(dic, fileName);
            dic = (Dictionary<string, int>)DeCompress(fileName);
            Console.WriteLine(dic.Count);
        }




本文转自94cool博客园博客,原文链接:http://www.cnblogs.com/94cool/archive/2011/08/30/2159146.html,如需转载请自行联系原作者

相关文章
|
1天前
|
程序员 C# 数据库
C# 比较对象新思路,利用反射技术打造更灵活的比较工具
中途接手的项目,碰到需要在更新对象信息时比较并记录差异的需求,最变态的还有附加要求,怎么办?有没有既能满足需求又能对项目影响最小的方法呢?分享这个我封装的方法,一个利用反射技术打造的更灵活的比较工具
|
2月前
|
编译器 C#
C#多态概述:通过继承实现的不同对象调用相同的方法,表现出不同的行为
C#多态概述:通过继承实现的不同对象调用相同的方法,表现出不同的行为
130 65
|
1月前
|
JSON 程序员 C#
使用 C# 比较两个对象是否相等的7个方法总结
比较对象是编程中的一项基本技能,在实际业务中经常碰到,比如在ERP系统中,企业的信息非常重要,每一次更新,都需要比较记录更新前后企业的信息,直接比较通常只能告诉我们它们是否指向同一个内存地址,那我们应该怎么办呢?分享 7 个方法给你!
|
2月前
|
存储 C#
【C#】大批量判断文件是否存在的两种方法效率对比
【C#】大批量判断文件是否存在的两种方法效率对比
52 1
|
2月前
|
存储 C#
C#使用哈夫曼编码实现压缩与解压
C#使用哈夫曼编码实现压缩与解压
41 0
|
2月前
|
XML 存储 缓存
C#使用XML文件的详解及示例
C#使用XML文件的详解及示例
118 0
|
3月前
|
C# 数据安全/隐私保护
C# 一分钟浅谈:类与对象的概念理解
【9月更文挑战第2天】本文从零开始详细介绍了C#中的类与对象概念。类作为一种自定义数据类型,定义了对象的属性和方法;对象则是类的实例,拥有独立的状态。通过具体代码示例,如定义 `Person` 类及其实例化过程,帮助读者更好地理解和应用这两个核心概念。此外,还总结了常见的问题及解决方法,为编写高质量的面向对象程序奠定基础。
35 2
|
4月前
|
监控 安全 C#
使用C#如何监控选定文件夹中文件的变动情况?
使用C#如何监控选定文件夹中文件的变动情况?
126 19
|
4月前
|
编译器 C# Windows
C#基础:手动编译一个.cs源代码文件并生成.exe可执行文件
通过上述步骤,应该能够高效准确地编译C#源代码并生成相应的可执行文件。此外,这一过程强调了对命令行编译器的理解,这在调试和自动化编译流程中是非常重要的。
388 2
|
4月前
|
C# 图形学 数据安全/隐私保护
Unity数据加密☀️ 二、使用Rider将C#代码生成DLL文件
Unity数据加密☀️ 二、使用Rider将C#代码生成DLL文件