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);
        }
    }

转载于:https://www.cnblogs.com/cnbwang/archive/2011/05/03/2034887.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值