zoukankan      html  css  js  c++  java
  • CompressPageStatePersister

    public class CompressPageStatePersister:PageStatePersister
        {
            
    private string pagestateKey = "__VIEWSATE";

            
    public CompressPageStatePersister(Page p):base(p)
            {

            }

            
    public override void Save()
            {
                
    if (!Page.EnableViewState)
                {
                    
    this.ViewState = null;
                }
                
    if (this.ViewState !=null || this.ControlState != null)
                {
                    Pair state 
    = new Pair(ViewState, ControlState);
                    var str 
    = CompressHelp.Compress(state);
                    Page.ClientScript.RegisterHiddenField(
    this.pagestateKey, str);
                }
            }
            
    public override void Load()
            {
                
    string postbackState = Page.Request.Form[pagestateKey];
                
    if (!string.IsNullOrEmpty(postbackState))
                {
                    Pair statePair 
    =(Pair) CompressHelp.Decompress(postbackState);
                    
    if (!Page.EnableViewState)
                    {
                        
    this.ViewState = null;
                    }
                    
    else
                    {
                        
    this.ViewState = statePair.First;
                    }
                    
    this.ControlState = statePair.Second;
                }
            }

            
        }

        
    public class CompressHelp 
        {
            
    private static LosFormatter formatter = new LosFormatter();
            
    public static string Compress(object state)
            {
                StringWriter writer 
    = new StringWriter();
                formatter.Serialize(writer, state);
                
    string stateString = writer.ToString();
                writer.Close();
                
    byte[] buffer = Convert.FromBase64String(stateString);
                MemoryStream ms 
    = new MemoryStream();
                GZipStream zipStream 
    = new GZipStream(ms, CompressionMode.Compress, true);
                zipStream.Write(buffer, 
    0, buffer.Length);
                zipStream.Close();
                buffer 
    = new byte[ms.Length];
                ms.Position 
    = 0;
                ms.Read(buffer, 
    0, buffer.Length);
                ms.Close();
                stateString 
    = Convert.ToBase64String(buffer);
                
    return stateString; 
            }

            
    public static object Decompress(string stateString)
            {
                
    byte[] buffer = Convert.FromBase64String(stateString);
                MemoryStream ms 
    = new MemoryStream();
                GZipStream zipStream 
    = new GZipStream(ms, CompressionMode.Decompress);
                MemoryStream msReader 
    = new MemoryStream();
                buffer 
    = new byte[0x1000];
                
    while (true)
                {
                    
    int read = zipStream.Read(buffer, 0, buffer.Length);
                    
    if (read<0)
                    {
                        
    break;
                    }
                    msReader.Write(buffer, 
    0, read);
                }
                zipStream.Close();
                ms.Close();
                msReader.Position 
    = 0;
                buffer 
    = msReader.ToArray();
                stateString 
    = Convert.ToBase64String(buffer);
                
    return formatter.Deserialize(stateString);
            }
        }
  • 相关阅读:
    Python 读取Excel之xlrd篇
    Python读取文件基本方法
    Python 偏函数用法全方位解析
    如何表示只有一个元素的元祖
    Python对文本读写的操作方法【源码】
    jvm入门及理解(六)——垃圾回收与算法
    jvm入门及理解(五)——运行时数据区(虚拟机栈)
    jvm入门及理解(四)——运行时数据区(堆+方法区)
    jvm入门及理解(三)——运行时数据区(程序计数器+本地方法栈)
    jvm入门及理解(二)——类加载器子系统
  • 原文地址:https://www.cnblogs.com/cnbwang/p/2034887.html
Copyright © 2011-2022 走看看