压缩解压和二进制序列化DEMO

仅供参考

using System.Data;
using System.IO;
using System.IO.Compression;
using System.Runtime.Serialization.Formatters.Binary;

namespace WebServiceTestApp
{
    public class ByteHelper
    {
        #region 压缩/解压缩
        /// <summary>
        /// 解压缩二进制格式数据,得到数据集
        /// </summary>
        /// <param name="bytes">二进制格式数据</param>
        /// <returns>数据集</returns>
        public static DataSet DecompressionDataSet(byte[] bytes)
        {
            // 初始化流,设置读取位置
            MemoryStream mStream = new MemoryStream(bytes);
            mStream.Seek(0, SeekOrigin.Begin);
            // 解压缩
            DeflateStream unZipStream = new DeflateStream(mStream, CompressionMode.Decompress, true);
            // 反序列化得到数据集
            DataSet dsResult = new DataSet();
            dsResult.RemotingFormat = SerializationFormat.Xml;//SerializationFormat.Binary会将数据中日期为空的值默认设置为“0001-01-01 08:00:00”
            BinaryFormatter bFormatter = new BinaryFormatter();
            dsResult = (DataSet)bFormatter.Deserialize(unZipStream);

            return dsResult;
        }
        /// <summary>
        /// 压缩Bytes
        /// </summary>
        /// <param name="btData">Byte数据</param>
        /// <returns></returns>
        public static byte[] CompressBytes(byte[] btData)
        {
            MemoryStream oStream = new MemoryStream();
            DeflateStream zipStream = new DeflateStream(oStream, CompressionMode.Compress);
            zipStream.Write(btData, 0, btData.Length);
            zipStream.Flush();
            zipStream.Close();
            //
            return oStream.ToArray();
        }
        /// <summary>
        /// 解压字节流
        /// </summary>
        /// <param name="btData"></param>
        /// <returns></returns>
        public static byte[] DeCompressBytes(byte[] btData)
        {
            // 初始化流,设置读取位置
            MemoryStream mStream = new MemoryStream(btData);
            mStream.Seek(0, SeekOrigin.Begin);
            // 解压缩
            DeflateStream unZipStream = new DeflateStream(mStream, CompressionMode.Decompress, true);
            //
            MemoryStream ms = new MemoryStream();
            int BUFFER_SIZE = 1000;
            byte[] buffer = new byte[BUFFER_SIZE];
            int count = unZipStream.Read(buffer, 0, buffer.Length);
            while (count > 0)
            {
                ms.Write(buffer, 0, count);
                count = unZipStream.Read(buffer, 0, buffer.Length);
            }
            unZipStream.Close();
            byte[] decompressed = ms.ToArray();
            ms.Close();
            return decompressed;
        }
        #endregion

        #region 二进制序列化
        /// <summary>
        /// 序列化对象
        /// </summary>
        /// <param name="ObjSerialize">待序列化的对象</param>
        /// <returns>内存流</returns>
        public static System.IO.MemoryStream SerializeBinary(object ObjSerialize)
        {
            System.Runtime.Serialization.Formatters.Binary.BinaryFormatter serializer =
             new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
            System.IO.MemoryStream ms = new System.IO.MemoryStream();
            serializer.Serialize(ms, ObjSerialize);
            return ms;
        }
        /// <summary>
        /// 反序列化对象
        /// </summary>
        /// <param name="ms">内存流</param>
        /// <returns>原始对象</returns>
        public static object DeSerializeBinary(System.IO.MemoryStream ms)
        {
            ms.Position = 0;
            System.Runtime.Serialization.Formatters.Binary.BinaryFormatter deserializer =
             new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
            object Obj = deserializer.Deserialize(ms);
            ms.Close();
            return Obj;
        }
        /// <summary>
        /// 字符串数组转字节数组
        /// </summary>
        /// <param name="strSource"></param>
        /// <returns></returns>
        public static byte[] ToBytes(string[] strSource)
        {
            System.IO.MemoryStream ms = SerializeBinary(strSource);
            return ms.ToArray();
        }
        /// <summary>
        /// 字符串数组转字节数组
        /// </summary>
        /// <param name="strSource"></param>
        /// <returns></returns>
        public static byte[] ToByte(string[][] strSource)
        {
            System.IO.MemoryStream ms = SerializeBinary(strSource);
            return ms.ToArray();
        }
        /// <summary>
        /// 内存流转字符串
        /// </summary>
        /// <param name="ms">内存流</param>
        /// <returns>字符串</returns>
        public static string StreamToString(MemoryStream ms)
        {
            // 准备起始位置
            ms.Position = 0;
            using (StreamReader sr = new StreamReader(ms))
            {
                // 读取数据量到String中
                return sr.ReadToEnd();
            }
        }
        /// <summary>
        /// 字符串转内存流
        /// </summary>
        /// <param name="strSource">字符串</param>
        /// <returns>内存流</returns>
        public static Stream StringToStream(string strSource)
        {
            StreamWriter sw = new StreamWriter(new MemoryStream());
            sw.Write(strSource);
            sw.Flush();
            return sw.BaseStream;
        }
        #endregion
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值