zoukankan      html  css  js  c++  java
  • DataSet GZip/Deflate Serializer

    
    namespace Test
    {
        using System.Diagnostics;
        using System.Web;
        using System.Web.Services;
        using System.Data;
        using System;
        using Microshaoft;
        [WebService(Namespace="http://www.microshaoft.com/")]
        public class Service1Class : WebService
        {
            [WebMethod]
            public string HelloWorld()
            {
                return "Hello World";
            }
            [WebMethod]
            public byte[] GetData()
            {
                DataSet ds = new DataSet();
                //populate dataset to do
                return DataSetSerializer.DataSetToGZipBytes(ds);
            }
            static void Main()
            {
                //
                // TODO: 在此处添加代码以启动应用程序
                //
                byte[] data = DataSetSerializer.DataSetToGZipBytes(new DataSet());
                Console.WriteLine(data.Length);
                DataSet ds = DataSetSerializer.GZipBytesToDataSet(data);
                Console.WriteLine("Hello World");
                Console.WriteLine(Environment.Version.ToString());
            }
        }
    }
    
    namespace Microshaoft
    {
        using System;
        using System.IO;
        using System.Data;
        using System.Runtime.Serialization;
        using System.Runtime.Serialization.Formatters.Binary;
        public class DataSetSerializer
        {
            //Server
            static public byte[] DataSetToGZipBytes(DataSet dataSet)
            {
                MemoryStream ms= new MemoryStream();
                IFormatter f = new BinaryFormatter();
                dataSet.RemotingFormat = SerializationFormat.Binary;
                f.Serialize(ms, dataSet);
                byte[] data = ms.ToArray();
                ms.Close();
                ms.Dispose();
                ms = null;
                return CompressHelper.GZipCompress(data);
            }
            //Client
            static public DataSet GZipBytesToDataSet(byte[] data)
            {
                data = CompressHelper.GZipDecompress(data);
                MemoryStream ms = new MemoryStream(data);
                IFormatter f = new BinaryFormatter();
                DataSet dataSet = f.Deserialize(ms) as DataSet;
                ms.Close();
                ms.Dispose();
                ms = null;
                return dataSet;
            }
        }
    }
    namespace Microshaoft
    {
        using System;
        using System.Text;
        using System.IO;
        using System.IO.Compression;
        /// <summary>
        /// Crypto 的摘要说明。
        /// </summary>
        public class CompressHelper
        {
            private static byte[] ReadStreamToBytes(Stream stream)
            {
                byte[] buffer = new byte[64 * 1024];
                MemoryStream ms = new MemoryStream();
                int r = 0;
                int l = 0;
                long position = -1;
                if (stream.CanSeek)
                {
                    position = stream.Position;
                    stream.Position = 0;
                }
                while (true)
                {
                    r = stream.Read(buffer, 0, buffer.Length);
                    if (r > 0)
                    {
                        l += r;
                        ms.Write(buffer, 0, r);
                    }
                    else
                    {
                        break;
                    }
                }
                byte[] bytes = new byte[l];
                ms.Position = 0;
                ms.Read(bytes, 0, (int) l);
                ms.Close();
                ms = null;
                if (position >= 0)
                {
                    stream.Position = position;
                }
                return bytes;
            }
            public static byte[] GZipCompress(byte[] data)
            {
                MemoryStream ms = new MemoryStream();
                GZipStream stream = new GZipStream(ms, CompressionMode.Compress, true);
                stream.Write(data, 0, data.Length);
                stream.Close();
                stream.Dispose();
                stream = null;
                byte[] buffer = ReadStreamToBytes(ms);
                ms.Close();
                ms.Dispose();
                ms = null;
                return buffer;
            }
            public static byte[] GZipDecompress(byte[] data)
            {
                MemoryStream ms = new MemoryStream(data);
                GZipStream stream = new GZipStream(ms, CompressionMode.Decompress);
                byte[] buffer = ReadStreamToBytes(stream);
                ms.Close();
                ms.Dispose();
                ms = null;
                stream.Close();
                stream.Dispose();
                stream = null;
                return buffer;
            }
            public static byte[] DeflateCompress(byte[] data)
            {
                MemoryStream ms = new MemoryStream();
                DeflateStream stream = new DeflateStream(ms, CompressionMode.Compress, true);
                stream.Write(data, 0, data.Length);
                stream.Close();
                stream.Dispose();
                stream = null;
                byte[] buffer = ReadStreamToBytes(ms);
                ms.Close();
                ms.Dispose();
                ms = null;
                return buffer;
            }
            public static byte[] DeflateDecompress(byte[] data)
            {
                MemoryStream ms = new MemoryStream(data);
                DeflateStream stream = new DeflateStream(ms, CompressionMode.Decompress);
                byte[] buffer = ReadStreamToBytes(stream);
                ms.Close();
                ms.Dispose();
                ms = null;
                stream.Close();
                stream.Dispose();
                stream = null;
                return buffer;
            }
        }
    }
    
    
  • 相关阅读:
    软件 = 程序 + 软件工程(构建之法读书笔记一)
    网站系统开发需要掌握的技术
    C++迪杰斯特拉算法求最短路径
    strcpy函数在VS2015无法使用的问题
    C++哈夫曼树编码和译码的实现
    java学习中一些疑惑解答(2)
    凯撒加密、解密算法
    利用DOS批处理实现定时关机操作
    C及C++中typedef的简单使用指南
    java学习中的一些疑惑解答
  • 原文地址:https://www.cnblogs.com/Microshaoft/p/1292948.html
Copyright © 2011-2022 走看看