BASE64Encoder 转BASE64
来源:互联网 发布:淘宝大学app ipad 编辑:程序博客网 时间:2024/06/07 02:02
在项目中需要把数据库中的图片转成BASE64传给页面控件,控件来显示图片。
java中我们常用sun.misc.BASE64Decoder来进行转码解码,在转成BASE64后传给控件控件显示的不是一张图片,但我自己解码可以在本地生成图片,经过跟踪发现当转成BASE64编码后每达到17个字节就会换行。
尝试去掉转码后字符串种的换行符、空格,结果传给控件可以正常显示图像
当出现传递过个图像时发现JAVA对于这种处理耗时太经过在网上查找得到以下方法,重载BASE64Encoder中的encode函数,效率可以提高一倍
package rfp;
public class BASE64Encoder {
private static char[] codec_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', '+', '/' };
public BASE64Encoder() {
}
public String encode(byte[] a) {
int totalBits = a.length * 8;
int nn = totalBits % 6;
int curPos = 0;// process bits
StringBuffer toReturn = new StringBuffer();
while (curPos < totalBits) {
int bytePos = curPos / 8;
switch (curPos % 8) {
case 0:
toReturn.append(codec_table[(a[bytePos] & 0xfc) >> 2]);
break;
case 2:
toReturn.append(codec_table[(a[bytePos] & 0x3f)]);
break;
case 4:
if (bytePos == a.length - 1) {
toReturn
.append(codec_table[((a[bytePos] & 0x0f) << 2) & 0x3f]);
} else {
int pos = (((a[bytePos] & 0x0f) << 2) | ((a[bytePos + 1] & 0xc0) >> 6)) & 0x3f;
toReturn.append(codec_table[pos]);
}
break;
case 6:
if (bytePos == a.length - 1) {
toReturn
.append(codec_table[((a[bytePos] & 0x03) << 4) & 0x3f]);
} else {
int pos = (((a[bytePos] & 0x03) << 4) | ((a[bytePos + 1] & 0xf0) >> 4)) & 0x3f;
toReturn.append(codec_table[pos]);
}
break;
default:
//never hanppen
break;
}
curPos+=6;
}
if(nn==2)
{
toReturn.append("==");
}
else if(nn==4)
{
toReturn.append("=");
}
return toReturn.toString();
}
}
处理这个问题花了不不少时间记下来,希望遇到的朋友可以做个参考
- BASE64Encoder 转BASE64
- Base64编码实现一---使用sun.misc.BASE64Encoder实现Base64
- Base64Encoder
- BASE64Encoder
- BASE64Encoder
- BASE64Encoder
- BASE64Encoder
- org.apache.commons.codec.binary.Base64与sun.misc.BASE64Encoder等效
- Base64上传图片时 sun.misc.BASE64Encoder找不到jar包的解决方法
- 【转】base64
- java实现图片与base64字符串之间的转换(不适用SUN公司的sun.misc.BASE64Encoder)
- The type BASE64Encoder is not accessible问题(转)
- (转)sun.misc.BASE64Encoder找不到jar包的解决方法
- Base64Encoder源码
- Base64Encoder.java
- BASE64Encoder解码
- BASE64Encoder找不到
- Android Base64Encoder
- 测试
- 内心感慨
- FORTRAN do语句中 出现 Error: Unclassifiable statement
- 边界布局相关代码
- My97DatePicker 演示和文档 !!!
- BASE64Encoder 转BASE64
- Observer模式——行为模式
- 内存对齐(自然对齐)
- Ubuntu 11.04 amd64 试用----浏览器安装 adobe falsh
- 限制对象只能在堆上产生
- 4.6把一个字符串中某一位数(start)开始,复制len个字符到另一个字符串
- jetway_loves_programming——windows7下安装配置sql server2000
- VB.net 简单程序的结构 (注意和VB过程的区别)
- ubuntu vi编辑器的设置