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 ...
随机推荐
- SpringBoot部署到Linux上AppserverApplication,访问不到控制层
放在本地是好好的,可以请求到,放到Linux上去的话就直接404, 解决办法: SpringBoot有个加载类叫AppserverApplication.这个大家应该都知道,我们平常都是如下写: @S ...
- labelme2coco问题:TypeError: Object of type 'int64' is not JSON serializable
最近在做MaskRCNN 在自己的数据(labelme)转为COCOjson格式遇到问题:TypeError: Object of type 'int64' is not JSON serializa ...
- LeetCode 141. 环形链表(Linked List Cycle) 19
141. 环形链表 141. Linked List Cycle 题目描述 给定一个链表,判断链表中是否有环. 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 ...
- [转帖]Linux下主机间文件传输命令
Linux下主机间文件传输命令 https://yq.aliyun.com/articles/53631?spm=a2c4e.11155435.0.0.580ce8ef4Q9uzs SCP命令: ...
- CTeX 更改字体(软件)
CTeX默认显示字体太小了,写起来看着费眼睛.有没有办法更改字体呢? 更改字体方法:(图片是默认字体) 未完 ...... 点击访问原文(进入后根据右侧标签,快速定位到本文) </b
- python 之 前端开发( DOM操作)
11.47 DOM操作 查找节点: 11.471 直接查找 document.getElementById //根据ID获取唯一一个标签 document.getElementsByClassName ...
- 二十、网卡框架分析、虚拟网卡驱动和DM9621驱动分析
一.网络设备驱动的结构 网卡设备不同于字符设备和块设备, 网络设备并不对应于/dev目录下的文件,它存放在/sys/class/net目录下. Linux系统对网络设备驱动定义了四个层次: 1. 网络 ...
- Scratch(三)剪刀石头布
经过上一讲的突击训练,我们从门外汉开始走向编程的深坑,我们今天还要对上一讲的游戏进行加强. 上一个游戏还能演变成什么游戏呢? 我其实知道你们想到的是老hu机什么的,确实,上一个游戏改改可以变成老hu机 ...
- stm32f103re stop模式下降低功耗
一端口设置1.将N.C的GPIO统一配置为GPIO_Mode_AIN: 2.检查输入引脚,按照不工作时候的状态相应配置为 IPD/IPU,即避免在内部上/下拉电阻上消耗电流,而且该电流理论值为VCC ...
- 2019牛客多校九 I. KM and M (类欧几里得)
大意: 给定$N,M$, 求$\sum\limits_{K=1}^N \text{(KM)&M}$ 考虑第$i$位的贡献, 显然为$\lfloor\frac{KM}{2^i}\rfloor$为 ...