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);
            }

  • 相关阅读:
    Java的快速失败和安全失败
    Java RMI与RPC的区别
    Java动态代理之JDK实现和CGlib实现(简单易懂)
    JVM——字节码增强技术简介
    Linux内存分配机制之伙伴系统和SLAB
    操作系统动态内存管理——malloc和free的工作机制
    Java中的Map
    Java的PriorityQueue
    Java中的List
    Java中的Set
  • 原文地址:https://www.cnblogs.com/94cool/p/2159146.html
Copyright © 2011-2022 走看看