原文:【项目分析】利用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的方法实现为:

代码

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

得出的结果为:

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

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

代码

        [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中。

得出的结果为:

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

【项目分析】利用C#改写JAVA中的Base64.DecodeBase64以及Inflater解码的更多相关文章

  1. 利用C#改写JAVA中的Base64.DecodeBase64以及Inflater解码

    最近正在进行项目服务的移植工作,即将JAVA服务的程序移植到DotNet平台中. 在JAVA程序中,有个HTTP请求数据头中,包含一个BASE64编码的字符串,例如: eJyVjMENgDAMA1fp ...

  2. 利用aspose-words 实现 java中word转pdf文件

    利用aspose-words  实现 java中word转pdf文件 首先下载aspose-words-15.8.0-jdk16.jar包 引入jar包,编写Java代码 package test; ...

  3. netty系列之:java中的base64编码器

    简介 什么是Base64编码呢?在回答这个问题之前,我们需要了解一下计算机中文件的分类,对于计算机来说文件可以分为两类,一类是文本文件,一类是二进制文件. 对于二进制文件来说,其内容是用二进制来表示的 ...

  4. javascript中的Base64.UTF8编码与解码详解

    javascript中的Base64.UTF8编码与解码详解 本文给大家介绍的是javascript中的Base64.UTF8编码与解码的函数源码分享以及使用范例,十分实用,推荐给小伙伴们,希望大家能 ...

  5. 在LoadRunner中进行Base64的编码和解码

    <Base64 Encode/Decode for LoadRunner>这篇文章介绍了如何在LoadRunner中对字符串进行Base64的编码和解码: http://ptfrontli ...

  6. Java中使用BASE64加密&解密

    package com.bao.tools.encryption; import java.io.IOException; import org.junit.Test; import sun.misc ...

  7. java 中使用Base64

    byte[] cipherData = Base64.encodeBase64(plainText.getBytes()); //默认不换行 byte[] cipherData = Base64.en ...

  8. Java中的BASE64

    located in rt.jar... public class sun.misc.BASE64Encoder extends sun.misc.CharacterEncoder{ //.. } p ...

  9. 利用正则表达式判断Java中的秒钟、分钟、小时、日、月是否符合规则

    // 定义校验规则 Pattern patRule = Pattern.compile("判断规则"); // 校验结果 patRule.matcher("判断的对象&q ...

随机推荐

  1. java键盘录入

    System.out:标准输出设备(默认是:控制台) System.in:标准输入设备(默认是:键盘) --------------------- InputStream in = System.in ...

  2. Iterator(迭代器)接口 --对象循环遍历

    <?php class MyIterator implements Iterator { private $var = array(); public function __construct ...

  3. hdu 4779 Tower Defense 2013杭州现场赛

    /** 题意: 有两种塔,重塔,轻塔.每种塔,能攻击他所在的一行和他所在的一列, 轻塔不 能被攻击,而重塔可以被至多一个塔攻击,也就是说重塔只能被重塔攻击.在一个n*m 的矩阵中,最少放一个塔,可放多 ...

  4. 我的ubuntu

    题外话:不知不觉也已经大三,最近思考了很多.在腾讯网看到了对李嘉诚的一篇专访,感触颇深. 想起来我从第一次接触ubuntu到现在也有一年了,记得第一个版本还是12.04,不过很快就换成了12.10,在 ...

  5. 转:触屏中的js事件

    一.触摸事件 ontouchstartontouchmoveontouchendontouchcancel 目前移动端浏览器均支持这4个触摸事件,包括IE.由于触屏也支持MouseEvent,因此他们 ...

  6. 通过加索引对sql语句优化

    今天看数据库的时候遇到这样一个SQL语句: select substr(a.djxh,) as id, (a.nd || a.yf) DECL_YM, a.zspm_dm as LEVY_ITEM_I ...

  7. Sicily-1009 梅森素数

    一.梅森素数 素数有无穷多个,却只有极少量的素数能表示成2p-1(p为素数)的形式.在不大于257的素数中,当p=2.3.5.7.13.17.19.31.67.127.257时,2p-1是素数,其它都 ...

  8. bespoke_百度百科

    bespoke_百度百科 bespoke

  9. C++_01_入门

    一.类的定义 Person.h类声明 Person.cpp类实现 main.cpp主函数 二.命名空间的使用 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv ...

  10. CKEditor和CKFinder整合实现上传下载功能

    CKEditor与CKFinder整合并实现文件上传功能 事先说明:此整合的是java版本号的, 用到的有:jsp + ckeditor + ckfinder (没有servlet 及其他框架技术) ...