【项目分析】利用C#改写JAVA中的Base64.DecodeBase64以及Inflater解码

最近正在进行项目服务的移植工作,即将JAVA服务的程序移植到DotNet平台中。

在JAVA程序中,有个HTTP请求数据头中,包含一个BASE64编码的字符串,例如:

eJyVjMENgDAMA1fpBMjnIkp3ZzZEpAa1PLmXY10sDdqBqr54Ww5AthG7zxJYa0MYr9p7bPFnK/uqjCj06y7JfHwAX3AhhA==

现在需要将这个字符串转化成原始字符串,原始字符串包含许多重要的信息。

我们来看下JAVA是如何实现这个程序的:

String str  =   " …… " ;
System.out.println(
new  String(ZipUtil.decompressByteArray(Base64.decodeBase64(str.getBytes()))));

其中Base64为commons-codec-1.3.jar包中的一个类。这个包主要包括核心的算法,比如MD5,SHA1等等,还有一些常规加密解密的算法。

而ZipUtil.decompressByteArray的方法实现为:

ExpandedBlockStart.gif 代码
public   static   byte [] decompressByteArray( byte  abyte0[]) 

    Inflater inflater 
=   new  Inflater(); 
    inflater.setInput(abyte0); 
    ByteArrayOutputStream bytearrayoutputstream 
=   new  ByteArrayOutputStream(abyte0.length); 
    
byte  abyte1[]  =   new   byte [ 1024 ]; 
    
while  ( ! inflater.finished()) 
        
try  
        { 
            
int  i  =  inflater.inflate(abyte1); 
            bytearrayoutputstream.write(abyte1, 
0 , i); 
        } 
        
catch  (DataFormatException dataformatexception) { } 
    
try  
    { 
        bytearrayoutputstream.close(); 
    } 
    
catch  (IOException ioexception) { } 
    
return  bytearrayoutputstream.toByteArray(); 
}

得出的结果为:

image

这个得到具有一定协议的数据格式,这是项目制定的,这里不必多说。

现在我们来看下C#该如何实现它:

ExpandedBlockStart.gif 代码
        [Test]
        
public   void  Base64Test()
        {
            
string  baseStr  =   " eJyVjMENgDAMA1fpBMjnIkp3ZzZEpAa1PLmXY10sDdqBqr54Ww5AthG7zxJYa0MYr9p7bPFnK/uqjCj06y7JfHwAX3AhhA== " ;
            
//  Base64解码
             byte [] baseBytes  =  Convert.FromBase64String(baseStr);
            
//  Inflater解压
             string  resultStr  =  Decompress(baseBytes);

            Console.WriteLine(resultStr);
        }

        
///   <summary>
        
///  Inflater解压
        
///   </summary>
        
///   <param name="baseBytes"></param>
        
///   <returns></returns>
         public   string  Decompress( byte [] baseBytes)
        {
            
string  resultStr  =   string .Empty;
            
using  (MemoryStream memoryStream  =   new  MemoryStream(baseBytes))
            {
                
using  (InflaterInputStream inf  =   new  InflaterInputStream(memoryStream))
                {
                    
using  (MemoryStream buffer  =   new  MemoryStream())
                    {
                        
byte [] result  =   new   byte [ 1024 ];

                        
int  resLen;
                        
while  ((resLen  =  inf.Read(result,  0 , result.Length))  >   0 )
                        {
                            buffer.Write(result, 
0 , resLen);
                        }
                        resultStr 
=  Encoding.Default.GetString(result);
                    }
                }
            }
            
return  resultStr;
        }

其中InflaterInputStream的类来自于ICSharpCode.SharpZipLib.dll中。

得出的结果为:

image

可以发现得到的结果是和JAVA版一样的,程序得到实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值