java .net base64解码_利用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的方法实现为:

48304ba5e6f9fe08f3fa1abda7d326ab.png

961ddebeb323a10fe0623af514929fc1.png代码

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

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

得出的结果为:

2610d6f251581389ceb688a7165cc10a.png

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

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

48304ba5e6f9fe08f3fa1abda7d326ab.png

961ddebeb323a10fe0623af514929fc1.png代码

[Test]

public void Base64Test()

{

string baseStr = "eJyVjMENgDAMA1fpBMjnIkp3ZzZEpAa1PLmXY10sDdqBqr54Ww5AthG7zxJYa0MYr9p7bPFnK/uqjCj06y7JfHwAX3AhhA==";

// Base64解码

byte[] baseBytes = Convert.FromBase64String(baseStr);

// Inflater解压

string resultStr = Decompress(baseBytes);

Console.WriteLine(resultStr);

}

/// 

/// Inflater解压

/// 

/// 

/// 

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;

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

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

得出的结果为:

32b366a1488984bd9d1f1a503c00bb16.png

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值