java版base64编码解码类

较早的java版本没有直接提供base64编码处理的类,都是通过其他类库的附加功能实现。而对于android平台,又有自己的base64支持类, 导致代码影响跨平台。所以就自己写了个base64编码处理的类,这样就可以同一套代码运行在android平台和se平台了。

package
com.hoverlees.utils; /** * @author hoverlees http://www.hoverlees.com * RFC 4648 */ public class Base64 { private static char[] base64Table="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".toCharArray(); private static byte[] base64TableMap=createTableMap(); private static byte[] createTableMap() { byte[] table=new byte[256]; for(int i=0;i<256;i++) table[i]=-1; for(int i=0;i<base64Table.length;i++){ table[base64Table[i]]=(byte)i; } return table; } /** * Base64编码,将字节数组转换成base64字符串 * @param data 字节数据 * @return base64编码的字符串 */ public static String encode(byte[] data){ StringBuffer s=new StringBuffer(); int state=0; int pos=0; for(int i=0;i<data.length;i++){ switch(pos){ case 0: state=(data[i]&0xFC)>>2; s.append(base64Table[state]); state=(data[i]&0x3)<<4; pos=1; break; case 1: state|=((data[i]&0xF0)>>4); s.append(base64Table[state]); state=(data[i]&0xF)<<2; pos=2; break; case 2: state|=((data[i]&0xC0)>>6); s.append(base64Table[state]); state=data[i]&0x3F; s.append(base64Table[state]); pos=0; break; } } if(pos==1){ s.append(base64Table[state]); s.append("=="); } else if(pos==2){ s.append(base64Table[state]); s.append("="); } return s.toString(); } /** * Base64解码,将base64字符串转换成字节数组 * @param data base64的字符串 * @return 解码后的字节数组 */ public static byte[] decode(String data){ byte[] bytes=data.getBytes(); int n=0; int pos=0; byte cchar,t; for(int i=0;i<bytes.length;i++){ cchar=bytes[i]; t=base64TableMap[cchar]; if(cchar=='=') break; switch(pos){ case 0: bytes[n]=(byte)(t<<2); pos=1; break; case 1: bytes[n]=(byte)(bytes[n]|((t&0x30)>>4)); n++; bytes[n]=(byte)((t&0xf)<<4); pos=2; break; case 2: bytes[n]=(byte)(bytes[n]|((t&0x3c)>>2)); n++; bytes[n]=(byte)((t&0x3)<<6); pos=3; break; case 3: bytes[n]=(byte)(bytes[n]|t); n++; pos=0; break; } } byte[] r=new byte[n]; for(int i=0;i<n;i++) r[i]=bytes[i]; return r; } }

 

posted @ 2015-03-23 12:41  清幽紫竹  Views(256)  Comments(0Edit  收藏  举报