Base64 for ActionScript 3.0

Base64 for ActionScript 2.0 的代码在 PHPRPC Client for ActionScript 2.0 中已经包含了,下面是 for ActionScript 3.0 的代码,与 for ActionScript 2.0 相比,3.0 版本编码的内容和解码后的内容是 ByteArray 类型的数据,速度得到的大幅的提升,并且对非文字编码的字节流支持的更好(例如对加密的字节流编码)。这个版本的使用更类似于 Java 版本

Base64.as

ActionScript代码
 
  1. /**********************************************************\ 
  2. |                                                          | 
  3. | The implementation of PHPRPC Protocol 3.0                | 
  4. |                                                          | 
  5. | Base64.as                                                | 
  6. |                                                          | 
  7. | Release 3.0.0                                            | 
  8. | Copyright (c) 2005-2007 by Team-PHPRPC                   | 
  9. |                                                          | 
  10. | WebSite:  http://www.phprpc.org/                         | 
  11. |           http://www.phprpc.net/                         | 
  12. |           http://www.phprpc.com/                         | 
  13. |           http://sourceforge.net/projects/php-rpc/       | 
  14. |                                                          | 
  15. | Authors:  Ma Bingyao <andot@ujn.edu.cn>                  | 
  16. |                                                          | 
  17. | This file may be distributed and/or modified under the   | 
  18. | terms of the GNU Lesser General Public License (LGPL)    | 
  19. | version 3.0 as published by the Free Software Foundation | 
  20. | and appearing in the included file LICENSE.              | 
  21. |                                                          | 
  22. \**********************************************************/  
  23. /* Base64 library for ActionScript 3.0. 
  24.  * 
  25.  * Copyright (C) 2007 Ma Bingyao <andot@ujn.edu.cn> 
  26.  * Version: 1.1 
  27.  * LastModified: Oct 26, 2007 
  28.  * This library is free.  You can redistribute it and/or modify it. 
  29.  */  
  30. /* 
  31.  * interfaces: 
  32.  * import org.phprpc.util.Base64; 
  33.  * import flash.utils.ByteArray; 
  34.  * var data:ByteArray = new ByteArray(); 
  35.  * data.writeUTFBytes("Hello PHPRPC"); 
  36.  * var b64:String = Base64.encode(data); 
  37.  * trace(b64); 
  38.  * trace(Base64.decode(b64)); 
  39.  */  
  40.   
  41. package org.phprpc.util{  
  42.     import flash.utils.ByteArray;  
  43.     public class Base64 {  
  44.         private static  const encodeChars:Array =   
  45.         ['A','B','C','D','E','F','G','H',  
  46.         'I','J','K','L','M','N','O','P',  
  47.         'Q','R','S','T','U','V','W','X',  
  48.         'Y','Z','a','b','c','d','e','f',  
  49.         'g','h','i','j','k','l','m','n',  
  50.         'o','p','q','r','s','t','u','v',  
  51.         'w','x','y','z','0','1','2','3',  
  52.         '4','5','6','7','8','9','+','/'];  
  53.         private static  const decodeChars:Array =   
  54.         [-1, -1, -1, -1, -1, -1, -1, -1,  
  55.         -1, -1, -1, -1, -1, -1, -1, -1,  
  56.         -1, -1, -1, -1, -1, -1, -1, -1,  
  57.         -1, -1, -1, -1, -1, -1, -1, -1,  
  58.         -1, -1, -1, -1, -1, -1, -1, -1,  
  59.         -1, -1, -1, 62, -1, -1, -1, 63,  
  60.         52, 53, 54, 55, 56, 57, 58, 59,  
  61.         60, 61, -1, -1, -1, -1, -1, -1,  
  62.         -1,  0,  1,  2,  3,  4,  5,  6,  
  63.          7,  8,  9, 10, 11, 12, 13, 14,  
  64.         15, 16, 17, 18, 19, 20, 21, 22,  
  65.         23, 24, 25, -1, -1, -1, -1, -1,  
  66.         -1, 26, 27, 28, 29, 30, 31, 32,  
  67.         33, 34, 35, 36, 37, 38, 39, 40,  
  68.         41, 42, 43, 44, 45, 46, 47, 48,  
  69.         49, 50, 51, -1, -1, -1, -1, -1];  
  70.         public static function encode(data:ByteArray):String {  
  71.             var out:Array = [];  
  72.             var i:int = 0;  
  73.             var j:int = 0;  
  74.             var r:int = data.length % 3;  
  75.             var len:int = data.length - r;  
  76.             var c:int;  
  77.             while (i < len) {  
  78.                 c = data[i++] << 16 | data[i++] << 8 | data[i++];  
  79.                 out[j++] = encodeChars[c >> 18] + encodeChars[c >> 12 & 0x3f] + encodeChars[c >> 6 & 0x3f] + encodeChars[c & 0x3f];  
  80.             }  
  81.             if (r == 1) {  
  82.                 c = data[i++];  
  83.                 out[j++] = encodeChars[c >> 2] + encodeChars[(c & 0x03) << 4] + "==";  
  84.             }  
  85.             else if (r == 2) {  
  86.                 c = data[i++] << 8 | data[i++];  
  87.                 out[j++] = encodeChars[c >> 10] + encodeChars[c >> 4 & 0x3f] + encodeChars[(c & 0x0f) << 2] + "=";  
  88.             }  
  89.             return out.join('');  
  90.         }  
  91.         public static function decode(str:String):ByteArray {  
  92.             var c1:int;  
  93.             var c2:int;  
  94.             var c3:int;  
  95.             var c4:int;  
  96.             var i:int;  
  97.             var len:int;  
  98.             var out:ByteArray;  
  99.             len = str.length;  
  100.             i = 0;  
  101.             out = new ByteArray();  
  102.             while (i < len) {  
  103.                 // c1  
  104.                 do {  
  105.                     c1 = decodeChars[str.charCodeAt(i++) & 0xff];  
  106.                 } while (i < len && c1 == -1);  
  107.                 if (c1 == -1) {  
  108.                     break;  
  109.                 }  
  110.                 // c2      
  111.                 do {  
  112.                     c2 = decodeChars[str.charCodeAt(i++) & 0xff];  
  113.                 } while (i < len && c2 == -1);  
  114.                 if (c2 == -1) {  
  115.                     break;  
  116.                 }  
  117.                 out.writeByte((c1 << 2) | ((c2 & 0x30) >> 4));  
  118.                 // c3  
  119.                 do {  
  120.                     c3 = str.charCodeAt(i++) & 0xff;  
  121.                     if (c3 == 61) {  
  122.                         return out;  
  123.                     }  
  124.                     c3 = decodeChars[c3];  
  125.                 } while (i < len && c3 == -1);  
  126.                 if (c3 == -1) {  
  127.                     break;  
  128.                 }  
  129.                 out.writeByte(((c2 & 0x0f) << 4) | ((c3 & 0x3c) >> 2));  
  130.                 // c4  
  131.                 do {  
  132.                     c4 = str.charCodeAt(i++) & 0xff;  
  133.                     if (c4 == 61) {  
  134.                         return out;  
  135.                     }  
  136.                     c4 = decodeChars[c4];  
  137.                 } while (i < len && c4 == -1);  
  138.                 if (c4 == -1) {  
  139.                     break;  
  140.                 }  
  141.                 out.writeByte(((c3 & 0x03) << 6) | c4);  
  142.             }  
  143.             return out;  
  144.         }  
  145.     }  
  146. }  

标签: ActionScript/Flash

« 上一篇 | 下一篇 »

只显示10条记录相关文章

发表评论

评论 (必须):