zoukankan      html  css  js  c++  java
  • datatable序列化为byte[]

    代码
    #region 可序列化对象到byte数组的相互转换
    /// <summary>
    /// 将可序列化对象转成Byte数组
    /// </summary>
    /// <param name="o">对象</param>
    /// <returns>返回相关数组</returns>
    protected static byte[] ObjectToByteArray(object o)
    {
        MemoryStream ms 
    = new MemoryStream();
        BinaryFormatter bf 
    = new BinaryFormatter();
        bf.Serialize(ms, o);
        ms.Close();
        
    return ms.ToArray();
    }
    /// <summary>
    /// 将可序列化对象转成的byte数组还原为对象
    /// </summary>
    /// <param name="b">byte数组</param>
    /// <returns>相关对象</returns>
    protected static object ByteArrayToObject(byte[] b)
    {
        MemoryStream ms 
    = new MemoryStream(b, 0, b.Length);
        BinaryFormatter bf 
    = new BinaryFormatter();
        
    return bf.Deserialize(ms);
    }
    #endregion

    #region 采用.net系统自带Gzip压缩类进行流压缩
    /// <summary>
    /// 压缩数据
    /// </summary>
    /// <param name="data"></param>
    /// <returns></returns>
    public static byte[] Compress(byte[] data)
    {
        
    byte[] bData;
        MemoryStream ms 
    = new MemoryStream();
        GZipStream stream 
    = new GZipStream(ms, CompressionMode.Compress, true);
        stream.Write(data, 
    0, data.Length);
        stream.Close();
        stream.Dispose();
        
    //必须把stream流关闭才能返回ms流数据,不然数据会不完整
        
    //并且解压缩方法stream.Read(buffer, 0, buffer.Length)时会返回0
        bData = ms.ToArray();
        ms.Close();
        ms.Dispose();
        
    return bData;
    }

    /// <summary>
    /// 解压数据
    /// </summary>
    /// <param name="data"></param>
    /// <returns></returns>
    public static byte[] Decompress(byte[] data)
    {
        
    byte[] bData;
        MemoryStream ms 
    = new MemoryStream();
        ms.Write(data, 
    0, data.Length);
        ms.Position 
    = 0;
        GZipStream stream 
    = new GZipStream(ms, CompressionMode.Decompress, true);
        
    byte[] buffer = new byte[1024];
        MemoryStream temp 
    = new MemoryStream();
        
    int read = stream.Read(buffer, 0, buffer.Length);
        
    while (read > 0)
        {
            temp.Write(buffer, 
    0, read);
            read 
    = stream.Read(buffer, 0, buffer.Length);
        }
        
    //必须把stream流关闭才能返回ms流数据,不然数据会不完整
        stream.Close();
        stream.Dispose();
        ms.Close();
        ms.Dispose();
        bData 
    = temp.ToArray();
        temp.Close();
        temp.Dispose();
        
    return bData;
    }
    #endregion

    #region 采用ICSharpCode.SharpZipLib.GZip进行压缩
    /// <summary>
    /// 采用ICShareCode的Gzip类进行byte数组压缩
    /// </summary>
    /// <param name="b"></param>
    /// <returns></returns>
    public static byte[] ICGzipCompress(byte[] b)
    {
        
    byte[] dataBuffer = new byte[4096];
        MemoryStream s 
    = new MemoryStream();
        GZipOutputStream gz 
    = new GZipOutputStream(s);

        StreamUtils.Copy(
    new MemoryStream(b), gz, dataBuffer);
        gz.Finish();
        
    byte[] z = new byte[gz.Length];
        z 
    = s.ToArray();
        gz.Close();
        
    return z;
    }
    /// <summary>
    /// 将采用ICShareCode的Gzip类压缩的byte数组解压缩
    /// </summary>
    /// <param name="b"></param>
    /// <returns></returns>
    public static byte[] ICGzipDecompress(byte[] b)
    {
        
    byte[] dataBuffer = new byte[4096];

        MemoryStream u 
    = new MemoryStream(b);
        Stream gi 
    = new GZipInputStream(u);
        MemoryStream uu 
    = new MemoryStream();
        StreamUtils.Copy(gi, uu, dataBuffer);

        
    byte[] z = new byte[uu.Length];
        z 
    = uu.ToArray();
        gi.Dispose();
        
    return z;

    }
    #endregion

    #region 采用ICSharpCode.SharpZipLib.Zip进行压缩
    /// <summary>
    /// 采用ICShareCode的Zip类进行byte数组压缩
    /// </summary>
    /// <param name="b"></param>
    /// <returns></returns>
    public static byte[] ICZipCompress(byte[] b)
    {
        MemoryStream m 
    = new MemoryStream();
        DeflaterOutputStream os 
    = new DeflaterOutputStream(m);
        os.Write(b, 
    0, b.Length);
        os.Finish();
        
    byte[] z = m.ToArray();
        os.Dispose();

        
    return z;
    }
    /// <summary>
    /// 将采用ICShareCode的Zip类压缩的数组解压缩
    /// </summary>
    /// <param name="b"></param>
    /// <returns></returns>
    public static byte[] ICZipDecompress(byte[] b)
    {
        MemoryStream m 
    = new MemoryStream();
        InflaterInputStream iis 
    = new InflaterInputStream(new MemoryStream(b));
        StreamUtils.Copy(iis, m, 
    new byte[4096]);
        
    byte[] z = m.ToArray();
        iis.Dispose();

        
    return z;
    }
    #endregion
  • 相关阅读:
    HOWTO: IE8下处理iframe自适应高度
    脚印:记录一次重构,将规则生产和规则消费(执行委托)分离
    Microsoft ASP.NET 2.0 AJAX 相关信息备忘
    脚印:软件开发随想录
    脚印:关于扩展方法的使用
    MVC 模式在javascript中的应用
    2007年总结
    下拉框自动回发!
    国庆前生活学习计划
    看完色戒有感
  • 原文地址:https://www.cnblogs.com/bloodofhero/p/1732085.html
Copyright © 2011-2022 走看看