zoukankan      html  css  js  c++  java
  • 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);
            }

  • 相关阅读:
    NetStat
    Linux远程目录挂载
    Mysql服务彪高排查方式及索引的正确使用步骤
    Linux查看哪些进程占用的系统 buffer/cache 较高 (hcache,lsof)命令
    防止sql注入的最好方式
    Fortify---Detail--Sql注入
    百亿级数据处理优化
    半年的总结和思考,继续前行
    Protoc Buffer 优化传输大小的一个细节
    RPC
  • 原文地址:https://www.cnblogs.com/94cool/p/2159146.html
Copyright © 2011-2022 走看看