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);
            }
        }
  • 相关阅读:
    2019-2020-1 20175323 实验四 外设驱动程序设计
    2019-2020-1 20175323 实验三 并发程序
    2019-2020-1-20175332 20175323 20175228-实验二固件程序设计
    2019-2020-1 20175323 20175332 20175228 实验一开发环境的熟悉
    20175323 团队项目 服务器端函数功能与业务逻辑详解
    2018-2019-2-20175323 java实验五 网络编程与安全
    2018-2019-2-20175323 java实验四 Android程序设计
    2018-2019-2-20175323 java实验三敏捷开发与XP实践
    2018-2019-2-20175323 java实验二《Java面向对象程序设计》
    2018-2019-2 20175323 实验一《Java开发环境的熟悉》实验报告
  • 原文地址:https://www.cnblogs.com/cnbwang/p/2034887.html
Copyright © 2011-2022 走看看