J2ME 下的 Base64的编码与解码


基于J2ME的Base64的编码与解码的实现,原码如下:
  1. importjava.io.*;
  2. publicclassBase64{
  3. privatestaticchar[]base64EncodeChars=newchar[]{
  4. 'A','B','C','D','E','F','G','H',
  5. 'I','J','K','L','M','N','O','P',
  6. 'Q','R','S','T','U','V','W','X',
  7. 'Y','Z','a','b','c','d','e','f',
  8. 'g','h','i','j','k','l','m','n',
  9. 'o','p','q','r','s','t','u','v',
  10. 'w','x','y','z','0','1','2','3',
  11. '4','5','6','7','8','9','+','/'};
  12. privatestaticbyte[]base64DecodeChars=newbyte[]{
  13. -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
  14. -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
  15. -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,62,-1,-1,-1,63,
  16. 52,53,54,55,56,57,58,59,60,61,-1,-1,-1,-1,-1,-1,
  17. -1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,
  18. 15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1,
  19. -1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,
  20. 41,42,43,44,45,46,47,48,49,50,51,-1,-1,-1,-1,-1};
  21. privateBase64(){}
  22. publicstaticStringencode(byte[]data){
  23. StringBuffersb=newStringBuffer();
  24. intlen=data.length;
  25. inti=0;
  26. intb1,b2,b3;
  27. while(i<len){
  28. b1=data[i++]&0xff;
  29. if(i==len){
  30. sb.append(base64EncodeChars[b1>>>2]);
  31. sb.append(base64EncodeChars[(b1&0x3)<<4]);
  32. sb.append("==");
  33. break;
  34. }
  35. b2=data[i++]&0xff;
  36. if(i==len){
  37. sb.append(base64EncodeChars[b1>>>2]);
  38. sb.append(
  39. base64EncodeChars[((b1&0x03)<<4)|((b2&0xf0)>>>4)]);
  40. sb.append(base64EncodeChars[(b2&0x0f)<<2]);
  41. sb.append("=");
  42. break;
  43. }
  44. b3=data[i++]&0xff;
  45. sb.append(base64EncodeChars[b1>>>2]);
  46. sb.append(
  47. base64EncodeChars[((b1&0x03)<<4)|((b2&0xf0)>>>4)]);
  48. sb.append(
  49. base64EncodeChars[((b2&0x0f)<<2)|((b3&0xc0)>>>6)]);
  50. sb.append(base64EncodeChars[b3&0x3f]);
  51. }
  52. returnsb.toString();
  53. }
  54. publicstaticbyte[]decode(Stringstr){
  55. byte[]data=str.getBytes();
  56. intlen=data.length;
  57. ByteArrayOutputStreambuf=newByteArrayOutputStream(len);
  58. inti=0;
  59. intb1,b2,b3,b4;
  60. while(i<len){
  61. /*b1*/
  62. do{
  63. b1=base64DecodeChars[data[i++]];
  64. }while(i<len&&b1==-1);
  65. if(b1==-1){
  66. break;
  67. }
  68. /*b2*/
  69. do{
  70. b2=base64DecodeChars[data[i++]];
  71. }while(i<len&&b2==-1);
  72. if(b2==-1){
  73. break;
  74. }
  75. buf.write((int)((b1<<2)|((b2&0x30)>>>4)));
  76. /*b3*/
  77. do{
  78. b3=data[i++];
  79. if(b3==61){
  80. returnbuf.toByteArray();
  81. }
  82. b3=base64DecodeChars[b3];
  83. }while(i<len&&b3==-1);
  84. if(b3==-1){
  85. break;
  86. }
  87. buf.write((int)(((b2&0x0f)<<4)|((b3&0x3c)>>>2)));
  88. /*b4*/
  89. do{
  90. b4=data[i++];
  91. if(b4==61){
  92. returnbuf.toByteArray();
  93. }
  94. b4=base64DecodeChars[b4];
  95. }while(i<len&&b4==-1);
  96. if(b4==-1){
  97. break;
  98. }
  99. buf.write((int)(((b3&0x03)<<6)|b4));
  100. }
  101. returnbuf.toByteArray();
  102. }
  103. }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值