1. private static final char[] legalChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".toCharArray();
  2.  
  3. /** Base64 encode the given data */
  4. public static String encode(byte[] data) {
  5. int start = ;
  6. int len = data.length;
  7. StringBuffer buf = new StringBuffer(data.length * / );
  8.  
  9. int end = len - ;
  10. int i = start;
  11. int n = ;
  12.  
  13. while (i <= end) {
  14. int d = ((((int) data[i]) & 0x0ff) << )
  15. | ((((int) data[i + ]) & 0x0ff) << )
  16. | (((int) data[i + ]) & 0x0ff);
  17.  
  18. buf.append(legalChars[(d >> ) & ]);
  19. buf.append(legalChars[(d >> ) & ]);
  20. buf.append(legalChars[(d >> ) & ]);
  21. buf.append(legalChars[d & ]);
  22.  
  23. i += ;
  24.  
  25. if (n++ >= ) {
  26. n = ;
  27. buf.append("");
  28. }
  29. }
  30.  
  31. if (i == start + len - ) {
  32. int d = ((((int) data[i]) & 0x0ff) << )
  33. | ((((int) data[i + ]) & ) << );
  34.  
  35. buf.append(legalChars[(d >> ) & ]);
  36. buf.append(legalChars[(d >> ) & ]);
  37. buf.append(legalChars[(d >> ) & ]);
  38. buf.append("=");
  39. } else if (i == start + len - ) {
  40. int d = (((int) data) & 0x0ff) << ;
  41.  
  42. buf.append(legalChars[(d >> ) & ]);
  43. buf.append(legalChars[(d >> ) & ]);
  44. buf.append("==");
  45. }
  46.  
  47. return buf.toString();
  48. }
  49.  
  50. private static int decode(char c) {
  51. if (c >= 'A' && c <= 'Z')
  52. return ((int) c) - ;
  53. else if (c >= 'a' && c <= 'z')
  54. return ((int) c) - + ;
  55. else if (c >= '' && c <= '')
  56. return ((int) c) - + + ;
  57. else
  58. switch (c) {
  59. case '+':
  60. return ;
  61. case '/':
  62. return ;
  63. case '=':
  64. return ;
  65. default:
  66. throw new RuntimeException("unexpected code: " + c);
  67. }
  68. }
  69.  
  70. /**
  71. * Decodes the given Base64 encoded String to a new byte array. The byte
  72. * array holding the decoded data is returned.
  73. */
  74.  
  75. public static byte[] decode(String s) {
  76.  
  77. ByteArrayOutputStream bos = new ByteArrayOutputStream();
  78. try {
  79. decode(s, bos);
  80. } catch (IOException e) {
  81. throw new RuntimeException();
  82. }
  83. byte[] decodedBytes = bos.toByteArray();
  84. try {
  85. bos.close();
  86. bos = null;
  87. } catch (IOException ex) {
  88. System.err.println("Error while decoding BASE64: " + ex.toString());
  89. }
  90. return decodedBytes;
  91. }
  92.  
  93. private static void decode(String s, OutputStream os) throws IOException {
  94. int i = ;
  95.  
  96. int len = s.length();
  97.  
  98. while (true) {
  99. while (i < len && s.charAt(i) <= ' ')
  100. i++;
  101.  
  102. if (i == len)
  103. break;
  104.  
  105. int tri = (decode(s.charAt(i)) << )
  106. + (decode(s.charAt(i + )) << )
  107. + (decode(s.charAt(i + )) << )
  108. + (decode(s.charAt(i + )));
  109.  
  110. os.write((tri >> ) & );
  111. if (s.charAt(i + ) == '=')
  112. break;
  113. os.write((tri >> ) & );
  114. if (s.charAt(i + ) == '=')
  115. break;
  116. os.write(tri & );
  117.  
  118. i += ;
  119. }
  120. }

Base 编解码(转)的更多相关文章

  1. Base64编解码Android和ios的例子,补充JNI中的例子

    1.在Android中java层提供了工具类:android.util.Base64; 里面都是静态方法,方便直接使用: 使用方法如下: // Base64 编码: byte [] encode =  ...

  2. 集显也能硬件编码:Intel SDK && 各种音视频编解码学习详解

    http://blog.sina.com.cn/s/blog_4155bb1d0100soq9.html INTEL MEDIA SDK是INTEL推出的基于其内建显示核心的编解码技术,我们在播放高清 ...

  3. 我的Android进阶之旅------>Android中编解码学习笔记

    编解码学习笔记(一):基本概念 媒体业务是网络的主要业务之间.尤其移动互联网业务的兴起,在运营商和应用开发商中,媒体业务份量极重,其中媒体的编解码服务涉及需求分析.应用开发.释放license收费等等 ...

  4. ffmpeg:编解码过程,基本用法

    1  术语: 什么是影片?其实就是一组(很多张)图片,时间间隔很小的连续展示出来,人们就觉得画面中的人物在动,这就是影片.那电影的实质就是N多张图片的集合.那 每张图片和帧又有什么关系呢?事实上,如果 ...

  5. 【miscellaneous】各种音视频编解码学习详解

    编解码学习笔记(一):基本概念 媒体业务是网络的主要业务之间.尤其移动互联网业务的兴起,在运营商和应用开发商中,媒体业务份量极重,其中媒体的编解码服务涉及需求分析.应用开发.释放license收费等等 ...

  6. 【FFMPEG】各种音视频编解码学习详解 h264 ,mpeg4 ,aac 等所有音视频格式

    目录(?)[-] 编解码学习笔记二codec类型 编解码学习笔记三Mpeg系列Mpeg 1和Mpeg 2 编解码学习笔记四Mpeg系列Mpeg 4 编解码学习笔记五Mpeg系列AAC音频 编解码学习笔 ...

  7. 基于3U PXIe的ZU7EV图像编解码设计方案

    1.板卡简介 基于3U PXIe的ZU7EV图像编码卡用于加固设备的图像接入,编解码采集存储.用于机载.舰载.车载等工作场景,支持工业级温度工作.(此方案是由北京太速设计的,已应用到实际领域) 2.主 ...

  8. iOS8系统H264视频硬件编解码说明

    公司项目原因,接触了一下视频流H264的编解码知识,之前项目使用的是FFMpeg多媒体库,利用CPU做视频的编码和解码,俗称为软编软解.该方法比较通用,但是占用CPU资源,编解码效率不高.一般系统都会 ...

  9. IOS和Android支持的音频编解码

    1.IOS编码 参考文档地址:https://developer.apple.com/library/ios/documentation/AudioVideo/Conceptual/Multimedi ...

随机推荐

  1. [转帖]Linux系统进程的知识总结,进程与线程之间的纠葛...

    Linux系统进程的知识总结,进程与线程之间的纠葛... https://cloud.tencent.com/developer/article/1500509 当一个程序开始执行后,在开始执行到执行 ...

  2. Scratch编程:快乐的小马(三)

    “ 上节课的内容全部掌握了吗?反复练习了没有,编程最好的学习方法就是练习.练习.再练习.一定要记得多动手.多动脑筋哦~~” 01 — 游戏介绍 这是一款简单的小游戏,实现了一匹小马跑来跑去(小马有跑动 ...

  3. Thread interrupted() 线程的中断

    问题: 1.线程的中断方式. 2.为什么中断阻塞中的线程,会抛出异常. 代码示例: package com.hdwl.netty; public class ThreadInterrupted { p ...

  4. Student's Camp CodeForces - 708E (dp,前缀和优化)

    大意: $n$行$m$列砖, 白天左侧边界每块砖有$p$概率被摧毁, 晚上右侧边界有$p$概率被摧毁, 求最后上下边界连通的概率. 记${dp}_{i,l,r}$为遍历到第$t$行时, 第$t$行砖块 ...

  5. IDEA/WebStorm使用笔记

    1.使用powershell作为默认终端 #改变powershell策略 Set-ExecutionPolicy Unrestricted -Scope CurrentUser 找到系统的powers ...

  6. # RESTful登录(基于token鉴权)的设计实例

    使用场景 现在很多基于restful的api接口都有个登录的设计,也就是在发起正式的请求之前先通过一个登录的请求接口,申请一个叫做token的东西.申请成功后,后面其他的支付请求都要带上这个token ...

  7. [JZOJ5281]钦点题解--瞎搞+链表

    [JZOJ5281]钦点题解--瞎搞+链表 题目链接 于 暴 力 过

  8. navicate的使用及用Python操作数据额库

    Navicat使用 下载地址:<https://pan.baidu.com/s/1bpo5mqj> Navicat是基于mysql操作的,所以能否自主完成一些练习,就能够运用Navicat ...

  9. element-ui 日期选择器范围时间限制

    来自 https://www.cnblogs.com/xjcjcsy/p/7977966.html 侵删 ElementUI是饿了么推出的一套基于vue2.x的一个ui框架.官方文档也很详细,这里做一 ...

  10. iOS NSNotificationCenter 使用姿势详解

    最近在做平板的过程中,发现了一些很不规范的代码.偶然修复支付bug的时候,看到其他项目代码,使用通知的地方没有移除,我以为我这个模块的支付闪退是因为他通知没有移除的缘故.而在debug和看了具体的代码 ...