Base 编解码(转)
- private static final char[] legalChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".toCharArray();
- /** Base64 encode the given data */
- public static String encode(byte[] data) {
- int start = ;
- int len = data.length;
- StringBuffer buf = new StringBuffer(data.length * / );
- int end = len - ;
- int i = start;
- int n = ;
- while (i <= end) {
- int d = ((((int) data[i]) & 0x0ff) << )
- | ((((int) data[i + ]) & 0x0ff) << )
- | (((int) data[i + ]) & 0x0ff);
- buf.append(legalChars[(d >> ) & ]);
- buf.append(legalChars[(d >> ) & ]);
- buf.append(legalChars[(d >> ) & ]);
- buf.append(legalChars[d & ]);
- i += ;
- if (n++ >= ) {
- n = ;
- buf.append("");
- }
- }
- if (i == start + len - ) {
- int d = ((((int) data[i]) & 0x0ff) << )
- | ((((int) data[i + ]) & ) << );
- buf.append(legalChars[(d >> ) & ]);
- buf.append(legalChars[(d >> ) & ]);
- buf.append(legalChars[(d >> ) & ]);
- buf.append("=");
- } else if (i == start + len - ) {
- int d = (((int) data) & 0x0ff) << ;
- buf.append(legalChars[(d >> ) & ]);
- buf.append(legalChars[(d >> ) & ]);
- buf.append("==");
- }
- return buf.toString();
- }
- private static int decode(char c) {
- if (c >= 'A' && c <= 'Z')
- return ((int) c) - ;
- else if (c >= 'a' && c <= 'z')
- return ((int) c) - + ;
- else if (c >= '' && c <= '')
- return ((int) c) - + + ;
- else
- switch (c) {
- case '+':
- return ;
- case '/':
- return ;
- case '=':
- return ;
- default:
- throw new RuntimeException("unexpected code: " + c);
- }
- }
- /**
- * Decodes the given Base64 encoded String to a new byte array. The byte
- * array holding the decoded data is returned.
- */
- public static byte[] decode(String s) {
- ByteArrayOutputStream bos = new ByteArrayOutputStream();
- try {
- decode(s, bos);
- } catch (IOException e) {
- throw new RuntimeException();
- }
- byte[] decodedBytes = bos.toByteArray();
- try {
- bos.close();
- bos = null;
- } catch (IOException ex) {
- System.err.println("Error while decoding BASE64: " + ex.toString());
- }
- return decodedBytes;
- }
- private static void decode(String s, OutputStream os) throws IOException {
- int i = ;
- int len = s.length();
- while (true) {
- while (i < len && s.charAt(i) <= ' ')
- i++;
- if (i == len)
- break;
- int tri = (decode(s.charAt(i)) << )
- + (decode(s.charAt(i + )) << )
- + (decode(s.charAt(i + )) << )
- + (decode(s.charAt(i + )));
- os.write((tri >> ) & );
- if (s.charAt(i + ) == '=')
- break;
- os.write((tri >> ) & );
- if (s.charAt(i + ) == '=')
- break;
- os.write(tri & );
- i += ;
- }
- }
Base 编解码(转)的更多相关文章
- Base64编解码Android和ios的例子,补充JNI中的例子
1.在Android中java层提供了工具类:android.util.Base64; 里面都是静态方法,方便直接使用: 使用方法如下: // Base64 编码: byte [] encode = ...
- 集显也能硬件编码:Intel SDK && 各种音视频编解码学习详解
http://blog.sina.com.cn/s/blog_4155bb1d0100soq9.html INTEL MEDIA SDK是INTEL推出的基于其内建显示核心的编解码技术,我们在播放高清 ...
- 我的Android进阶之旅------>Android中编解码学习笔记
编解码学习笔记(一):基本概念 媒体业务是网络的主要业务之间.尤其移动互联网业务的兴起,在运营商和应用开发商中,媒体业务份量极重,其中媒体的编解码服务涉及需求分析.应用开发.释放license收费等等 ...
- ffmpeg:编解码过程,基本用法
1 术语: 什么是影片?其实就是一组(很多张)图片,时间间隔很小的连续展示出来,人们就觉得画面中的人物在动,这就是影片.那电影的实质就是N多张图片的集合.那 每张图片和帧又有什么关系呢?事实上,如果 ...
- 【miscellaneous】各种音视频编解码学习详解
编解码学习笔记(一):基本概念 媒体业务是网络的主要业务之间.尤其移动互联网业务的兴起,在运营商和应用开发商中,媒体业务份量极重,其中媒体的编解码服务涉及需求分析.应用开发.释放license收费等等 ...
- 【FFMPEG】各种音视频编解码学习详解 h264 ,mpeg4 ,aac 等所有音视频格式
目录(?)[-] 编解码学习笔记二codec类型 编解码学习笔记三Mpeg系列Mpeg 1和Mpeg 2 编解码学习笔记四Mpeg系列Mpeg 4 编解码学习笔记五Mpeg系列AAC音频 编解码学习笔 ...
- 基于3U PXIe的ZU7EV图像编解码设计方案
1.板卡简介 基于3U PXIe的ZU7EV图像编码卡用于加固设备的图像接入,编解码采集存储.用于机载.舰载.车载等工作场景,支持工业级温度工作.(此方案是由北京太速设计的,已应用到实际领域) 2.主 ...
- iOS8系统H264视频硬件编解码说明
公司项目原因,接触了一下视频流H264的编解码知识,之前项目使用的是FFMpeg多媒体库,利用CPU做视频的编码和解码,俗称为软编软解.该方法比较通用,但是占用CPU资源,编解码效率不高.一般系统都会 ...
- IOS和Android支持的音频编解码
1.IOS编码 参考文档地址:https://developer.apple.com/library/ios/documentation/AudioVideo/Conceptual/Multimedi ...
随机推荐
- [转帖]Linux系统进程的知识总结,进程与线程之间的纠葛...
Linux系统进程的知识总结,进程与线程之间的纠葛... https://cloud.tencent.com/developer/article/1500509 当一个程序开始执行后,在开始执行到执行 ...
- Scratch编程:快乐的小马(三)
“ 上节课的内容全部掌握了吗?反复练习了没有,编程最好的学习方法就是练习.练习.再练习.一定要记得多动手.多动脑筋哦~~” 01 — 游戏介绍 这是一款简单的小游戏,实现了一匹小马跑来跑去(小马有跑动 ...
- Thread interrupted() 线程的中断
问题: 1.线程的中断方式. 2.为什么中断阻塞中的线程,会抛出异常. 代码示例: package com.hdwl.netty; public class ThreadInterrupted { p ...
- Student's Camp CodeForces - 708E (dp,前缀和优化)
大意: $n$行$m$列砖, 白天左侧边界每块砖有$p$概率被摧毁, 晚上右侧边界有$p$概率被摧毁, 求最后上下边界连通的概率. 记${dp}_{i,l,r}$为遍历到第$t$行时, 第$t$行砖块 ...
- IDEA/WebStorm使用笔记
1.使用powershell作为默认终端 #改变powershell策略 Set-ExecutionPolicy Unrestricted -Scope CurrentUser 找到系统的powers ...
- # RESTful登录(基于token鉴权)的设计实例
使用场景 现在很多基于restful的api接口都有个登录的设计,也就是在发起正式的请求之前先通过一个登录的请求接口,申请一个叫做token的东西.申请成功后,后面其他的支付请求都要带上这个token ...
- [JZOJ5281]钦点题解--瞎搞+链表
[JZOJ5281]钦点题解--瞎搞+链表 题目链接 于 暴 力 过
- navicate的使用及用Python操作数据额库
Navicat使用 下载地址:<https://pan.baidu.com/s/1bpo5mqj> Navicat是基于mysql操作的,所以能否自主完成一些练习,就能够运用Navicat ...
- element-ui 日期选择器范围时间限制
来自 https://www.cnblogs.com/xjcjcsy/p/7977966.html 侵删 ElementUI是饿了么推出的一套基于vue2.x的一个ui框架.官方文档也很详细,这里做一 ...
- iOS NSNotificationCenter 使用姿势详解
最近在做平板的过程中,发现了一些很不规范的代码.偶然修复支付bug的时候,看到其他项目代码,使用通知的地方没有移除,我以为我这个模块的支付闪退是因为他通知没有移除的缘故.而在debug和看了具体的代码 ...