实现描述: 先添加10个对象,然后序列化并压缩,保持到文件,然后在添加10个对象,然后序列化并压缩,并追加到前面保持的文件中,然后读取文件解压缩,反序列化,得到一共添加的20个对象问题:解压缩的时候,只解压出来前10个对象的数据流,后10个对象的数据流没有解压,所以只能反序列化出前10个对象,后10个丢失代码如下:        /// <summary>        
        /// 序列化对象并压缩        
        /// </summary>        
        /// <param name="ds"></param>      
        static void DataSetSerializerCompression(List<Person> list, string savePath, string saveName)
        {
            IFormatter formatter = new BinaryFormatter();    
            MemoryStream ms = new MemoryStream();
            formatter.Serialize(ms, list);    
          
            byte[] buffer = ms.ToArray();  
            ms.Close();
            ms.Dispose();
            if (!Directory.Exists(savePath))  
                Directory.CreateDirectory(savePath);
            FileStream fs = File.Create(savePath + saveName);
            GZipStream gzipStream = new GZipStream(fs, CompressionMode.Compress, true);    
            gzipStream.Write(buffer, 0, buffer.Length);     
            gzipStream.Close();    
            gzipStream.Dispose();    
            fs.Close();     
            fs.Dispose();    
        }
        /// 序列化对象的追加
        /// </summary>
        /// <param name="filePath"></param>
        /// <param name="ds"></param>
        static void DataSerializerAppend(string filePath, List<Person> list_param)
        {
            IFormatter formatter = new BinaryFormatter();
            MemoryStream ms = new MemoryStream();
            formatter.Serialize(ms, list_param);   
            byte[] buffer = ms.ToArray();
            ms.Close(); 
            ms.Dispose();            FileStream s1 = File.Open(filePath, FileMode.Append);
            GZipStream gzipStream = new GZipStream(s1, CompressionMode.Compress, true);  
            gzipStream.Write(buffer, 0, buffer.Length); 
            gzipStream.Close(); 
         
            s1.Close();  
            s1.Dispose(); 
        }    
        /// 反序列化压缩的DataSet     
        /// </summary>     
        /// <param name="_filePath"></param>     
        /// <returns></returns>     
        static List<Person> DataSetDeserializeDecompress(string _filePath)
        {
            List<Person> listAll = new List<Person>();
            FileStream fs = File.OpenRead(_filePath);
            fs.Position = 0;    
            
            GZipStream gzipStream = new GZipStream(fs, CompressionMode.Decompress,true);//创建解压对象     
            byte[] buffer = new byte[4096];
            int offset = 0;    
            MemoryStream ms = new MemoryStream();    
            --只能读取出前10个对象的数据流,后10个对象的数据流丢失,但是fs是文件的全部数据流--
            while ((offset = gzipStream.Read(buffer, 0, buffer.Length)) != 0) 
            {
                ms.Write(buffer, 0, offset);//解压后的数据写入内存流     
            }
    
            BinaryFormatter sfFormatter = new BinaryFormatter();
            ms.Position = 0;     
            List<Person> ed_list;
            try
            {
                while (ms.Position != ms.Length)
                {
                    ed_list = (List<Person>)sfFormatter.Deserialize(ms);
                    listAll.AddRange(ed_list);
                }    
            }
            catch
            {
                throw;
            }
            finally
            {
                ms.Close();   
                ms.Dispose();  
            }
            fs.Close(); 
            fs.Dispose();
            gzipStream.Close();    
            gzipStream.Dispose();
            return listAll;
        }