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);
            }
        }
  • 相关阅读:
    POJ 1269 Intersecting Lines(判断两条线段关系)
    POJ 3304 Segments(判断直线和线段相交)
    poj 1383 Labyrinth【迷宫bfs+树的直径】
    poj 2631 Roads in the North【树的直径裸题】
    poj 1985 Cow Marathon【树的直径裸题】
    hdoj 1596 find the safest road【最短路变形,求最大安全系数】
    hdoj 1260 Tickets【dp】
    poj 1564 Sum It Up【dfs+去重】
    2014 牡丹江现场赛 i题 (zoj 3827 Information Entropy)
    hdoj 2473 Junk-Mail Filter【并查集节点的删除】
  • 原文地址:https://www.cnblogs.com/cnbwang/p/2034887.html
Copyright © 2011-2022 走看看