Base64编码的Java语言实现

心在天涯27

心在天涯27

2016-02-19 13:25

下面图老师小编要向大家介绍下Base64编码的Java语言实现,看起来复杂实则是简单的,掌握好技巧就OK,喜欢就赶紧收藏起来吧!

  import Java.io.*;
  
  public class MIMEBase64 {
  /*
  这是个简单的Base64编码程序
  作者:Roc Chen rocanny@163.com
  Base64 使用US-ASCII子集的65个字符, 每个字符用6位表示
  因此"m"的Base64值为38, 二进制形式是 100110.
  
  对于文本串,编码过程如下。例如"men":
  
  先转成US-ASCII值.
  
  "m"十进制 109
  "e"十进制 101
  "n"十进制 110
  
  二进制 :
  
  m 01101101
  e 01100101
  n 01101110
  
  三个8位连起来是24位
  011011010110010101101110
  
  然后分成4个6位
  011011 010110 010101 101110
  
  现在得到4个值,十进制为
  27 22 21 46
  
  对应的 Base64 字符是 :
  b W V u
  
  编码总是基于3个字符,从而产生4个Base64字符。
  假如只剩1或2个字符,使用非凡字符"="补齐Base64的4字。
  如,编码"me"
  
  01101101 01100101
  0110110101100101
  011011 010110 0101
  111111 (与,补足6位)
  011011 010110 010100
  b W U
  b W U = ("=" 补足4字符)
  
  于是 "bWU=" 就是"me"的Base64值.
  
  再如编码 "m"
  
  01101101
  011011 01
  111111
  011011 010000
  b Q = =
  于是 "bQ==" 就是"m"的Base64值.
  
  值得注重的是,MIME规定一行最多76个字符.
  
  */
  
  static String BaseTable[] = {
  "A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P",
  "Q","R","S","T","U","V","W","X","Y","Z","a","b","c","d","e","f",
  "g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v",
  "w","x","y","z","0","1","2","3","4","5","6","7","8","9","+","/"
  };
  
  
  public static void encode(String filename, BufferedWriter out) {
  try {
  File f = new File(filename);
  FileInputStream fin = new FileInputStream(filename);
  
  // 读文件到BYTE数组
  byte bytes[] = new byte[(int)(f.length())];
  int n = fin.read(bytes);
  
  if (n 1) return; // 没有内容
  
  byte buf[] = new byte[4]; // base64 字符数组
  
  int n3byt = n / 3; // 3 bytes 组数
  int nrest = n % 3; // 分组后剩余 bytes
  int k = n3byt * 3; //
  int linelength = 0; // 行长
  int i = 0; // 指针
  
  // 3-bytes 分组 ...
  while ( i k ) {
  buf[0] = (byte)(( bytes[i] & 0xFC) 2);
  buf[1] = (byte)(((bytes[i] & 0x03) 4)
  ((bytes[i+1] & 0xF0) 4));
  buf[2] = (byte)(((bytes[i+1] & 0x0F) 2)
  ((bytes[i+2] & 0xC0) 6));
  buf[3] = (byte)( bytes[i+2] & 0x3F);
  send(out, BaseTable[buf[0]]);
  send(out, BaseTable[buf[1]]);
  send(out, BaseTable[buf[2]]);
  send(out, BaseTable[buf[3]]);
  /*
  以上代码可以优化,但会难以理解
  buf[0]= (byte)(b[i] 2);
  buf[1]= (byte)(((b[i] & 0x03) 4)(b[i+1] 4));
  buf[2]= (byte)(((b[i+1] & 0x0F) 2)(b[i+2] 6));
  buf[3]= (byte)(b[i+2] & 0x3F);
  send(out,BaseTable[buf[0]]+BaseTable[buf[1]]+
  BaseTable[buf[2]]+BaseTable[buf[3]]);
  */
  
  if ((linelength += 4) = 76) {
  send(out, "");
  linelength = 0;
  }
  i += 3;
  }
  
  // 处理尾部 ...
  if (nrest==2) {
  // 2 bytes left
  buf[0] = (byte)(( bytes[k] & 0xFC) 2);
  buf[1] = (byte)(((bytes[k] & 0x03) 4)
  ((bytes[k+1] & 0xF0) 4));
  buf[2] = (byte)(( bytes[k+1] & 0x0F) 2);
  }
  else if (nrest==1) {
  // 1 byte left
  buf[0] = (byte)((bytes[k] & 0xFC) 2);
  buf[1] = (byte)((bytes[k] & 0x03) 4);
  }
  if (nrest 0) {
  // 发送尾部
  if ((linelength += 4) = 76) send(out, "
展开更多 50%)
分享

猜你喜欢

Base64编码的Java语言实现

编程语言 网络编程
Base64编码的Java语言实现

Base64编码

编程语言 网络编程
Base64编码

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

base64编码、解码函数

ASP
base64编码、解码函数

BASE64编码规则及C#实现

电脑网络
BASE64编码规则及C#实现

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

Asp base64编码、解码函数

Web开发
Asp base64编码、解码函数

如何用asp进行base64加密

ASP
如何用asp进行base64加密

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

进入门槛低 Web 2.0前景诱人

进入门槛低 Web 2.0前景诱人

利用中断实现每500毫秒接收一次数据

利用中断实现每500毫秒接收一次数据
下拉加载更多内容 ↓