📄 base64.java
字号:
package jp.co.sjts.gsession.tools;
/**
* <p>Base64 僄儞僐乕僪丒僨僐乕僪 Base64.java
*
* @author Satoru K <koni@sjts.co.jp>
*/
public class Base64 {
/**
* <p>僄儞僐乕僪僥乕僽儖
*/
static final char[] table = {
'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','+','/','='
};
/**
* <p>僨僐乕僪僨乕僽儖
*/
static final byte[] table2 = {
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0,62, 0, 0, 0,63,
52,53,54,55,56,57,58,59,
60,61, 0, 0, 0, 0, 0, 0,
0, 0, 1, 2, 3, 4, 5, 6,
7, 8, 9,10,11,12,13,14,
15,16,17,18,19,20,21,22,
23,24,25, 0, 0, 0, 0, 0,
0,26,27,28,29,30,31,32,
33,34,35,36,37,38,39,40,
41,42,43,44,45,46,47,48,
49,50,51, 0, 0, 0, 0, 0};
/**
* Base64傊僄儞僐乕僪(晞崋壔)偡傞
*/
public static String encode(byte[] bytes) {
StringBuffer sb = new StringBuffer("");
for(int i=0;bytes.length-2>i;i+=3) {
_encode(sb,bytes[i],bytes[i+1],bytes[i+2]);
}
if((bytes.length%3)==2) {
int i = ((bytes[bytes.length-3] & 0xFF) << 8) | ((bytes[bytes.length-2] & 0xFF) << 0);
sb.append(table[(i>>10)&0x3F]);
sb.append(table[(i>>4)&0x3F]);
sb.append(table[(i<<2)&0x3F]);
sb.append(table[64]);
} else if((bytes.length%3)==1) {
int i = bytes[bytes.length-2] & 0xFF;
sb.append(table[(i>>2)&0x3F]);
sb.append(table[(i<<4)&0x3F]);
sb.append(table[64]);
sb.append(table[64]);
}
return sb.toString();
}
/**
* Base64傊僨僐乕僪(暋崌壔)偡傞
*/
public static byte[] decode(String str) {
byte[] b = (new String(str)).getBytes();
long n;
int i=0,j=0;
int len = (b.length*4)/3;
if(((char)b[b.length -1]) == '=') {
if(((char)b[b.length -2]) == '=') {
--len;
}
--len;
}
byte[] buf = new byte[len];
while(i < b.length) {
n = (table2[(int)b[i++]] << 18) |
(table2[(int)b[i++]] << 12) |
(table2[(int)b[i++]] << 6) |
table2[(int)b[i++]];
buf[j++] = (byte)((n >>> 16) & 0xFF);
if(--len > 0) {
buf[j++] = (byte)((n >>> 8) & 0xFF);
if(--len > 0) {
buf[j++] = (byte)(n & 0xFF);
len--;
}
}
}
return buf;
}
/**
* <p>僄儞僐乕僪
*/
private static void _encode(StringBuffer sb,byte b1,byte b2,byte b3) {
int i = ((b1 & 0xFF) << 16) & 0xFF0000;
i |= ((b2 & 0xFF) << 8) & 0xFF00;
i |= ((b3 & 0xFF) <<0) & 0x00FF;
sb.append(table[(i>>18) & 0x3F]);
sb.append(table[(i>>12) & 0x3F]);
sb.append(table[(i>>6) & 0x3F]);
sb.append(table[(i>>0) & 0x3F]);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -