【项目分析】利用C#改写JAVA中的Base64.DecodeBase64以及Inflater解码-阿里云开发者社区

开发者社区> 杰克.陈> 正文

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

简介: 原文:【项目分析】利用C#改写JAVA中的Base64.DecodeBase64以及Inflater解码 最近正在进行项目服务的移植工作,即将JAVA服务的程序移植到DotNet平台中。 在JAVA程序中,有个HTTP请求数据头中,包含一个BASE64编码的字符串,例如: eJyVjMENgDAMA1fpBMjnIkp3ZzZEpAa1PLmXY10sDdqBqr54Ww5AthG7zxJYa0MYr9p7bPFnK/uqjCj06y7JfHwAX3AhhA== 现在需要将这个字符串转化成原始字符串,原始字符串包含许多重要的信息。
+关注继续查看
原文:【项目分析】利用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的方法实现为:

img_405b18b4b6584ae338e0f6ecaf736533.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#该如何实现它:

img_405b18b4b6584ae338e0f6ecaf736533.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版一样的,程序得到实现。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
解决提交项目到GitHub,报错Please tell me who you are的问题
描述:         在第一次提交项目到GitHub时,出现了以下问题                  看了一下错误原因:Run git config --global user.email "you@example.
1608 0
在 Xcode 项目中使用 swift package fetch
本文讲的是在 Xcode 项目中使用 swift package fetch,到目前为止,Cocoa with Love 的 git 仓库都使用“git subtrees”来管理相关依赖,所有的依赖都被拷贝并静态存放于依赖方目录下。我希望能找到一种更动态地依赖管理方式来代替现有的方案
1420 0
关于奇怪的并行进程分析(三)
在前两篇的基础上,对于一个环境中存在的奇怪并行进程问题进行了初步的分析。 初步排除了是通过scheduler的job运行导致的,一方面因为运行的时间会有延迟,甚至有很大的差别。
735 0
IDA反汇编/反编译静态分析iOS模拟器程序(五)F5反编译
反编译是IDA最让人振奋的功能,它的本质是IDA的一个插件,不过会被当做hex-rays的另一个产品。既然是产品,那当然就另外收费,demo版是没有的。
1064 0
SAS进阶《深入解析SAS》之Base SAS基础、读取外部数据到SAS数据集
SAS进阶《深入解析SAS》之Base SAS基础、读取外部数据到SAS数据集 前言:在学习完《SAS编程与商业案例》后,虽然能够接手公司的基本工作,但是为了更深入的SAS学习,也为了站在更高的一个层次上去掌握和优化公司工作,故而又咬紧牙关加紧学习《深入解析SAS》.就目前的两本书的对比,显而易见的是本书比《SAS编程…》要厚的多,再者内容更新是2015年著,最后是内容详实
1811 0
HBase基本知识介绍及典型案例分析
本文来自于2018年10月20日由中国 HBase 技术社区在武汉举办的中国 HBase Meetup 第六次线下交流会。 HBase基本知识介绍及典型案例分析 PPT 下载:http://hbase.group/slides/162 本次分享的内容主要分为以下五点: HBase基本知识; HBase读写流程; RowKey设计要点; HBase生态介绍; HBase典型案例分析。
3558 0
生成项目目录结构(based on windows system)
描述:         作为程序员,在工作中,我们经常会有需求,需要罗列出项目的结构图;如果手工来整理的话,太过浪费时间,其实我们可以借助tree命令来快速生成目录结构。         本文主要介绍一下,基于windows系统,如何快速生成目录结构的方法。
2051 0
艾伟也谈项目管理,解读敏捷需求分析五大关键因素
  大多数学计算机语言的人都会有过这样的感受,过去一直认为编程和架构是整个软件生命周期里最了不起的部分,但实际工作后才会发现在商业产品里,需求分析才是一个商业软件成功与否的关键。   放眼望去,在当今软件工程领域出现的许多问题,诸如缺陷及资源运用不当,都源于需求的不清晰,甚至有软件人戏称:“需求变更乃万恶之源”,一时也获得了颇多响应。
1098 0
idea新建maven项目时,mvn archetype:generate 速度缓慢
原文 idea新建maven项目时,mvn archetype:generate 速度缓慢 1 现象: 用IDEA新建maven项目,填写完各种参数,创建时,控制台卡在“[INFO] Generating project in Batch mode”处: 同时,右下方状态栏处,显示创建过程仍在进行: 2 原因 IDEA根据maven archetype的本质,其实是执行mvn archetype:generate命令,该命令执行时,需要指定一个archetype-catalog.xml文件。
987 0
+关注
杰克.陈
一个安静的程序猿~
10427
文章
2
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载