高调做事...低调做人...

基于 flash AS3.0 的BASE64编码与解码类

 最近任务紧,工作忙,好久没来更新我的BLOG了。

今天在国外网站上淘到一个很好用的AS3的BASE64类

感觉写得简洁而强大。很好,赶快放上来。

调用代码:
  1. import com.dynamicflash.utils.Base64;      
  2.   
  3. //编码和解码字符串     
  4. var source:String = "Hello, world";      
  5. var encoded:String = Base64.encode(source);      
  6. trace(encoded);      
  7.      
  8. var decoded:String = Base64.decode(encoded);      
  9. trace(decoded);     
  10.   
  11. //编码和解码ByteArray     
  12. var obj:Object= {name:"Dynamic Flash",url:"http://dynamicflash.com"};   
  13. var source:ByteArray = new ByteArray();   
  14. source.writeObject(obj);   
  15.   
  16. var encoded:String = Base64.encodeByteArray(source);   
  17. trace(encoded);   
  18.   
  19. var decoded:ByteArray = Base64.decodeToByteArray(encoded);   
  20. obj = decoded.readObject();   
  21. trace(obj.name + "(" + obj.url + ")");   

 

Base64类代码:
  1. package com.dynamicflash.util{   
  2.   
  3.     import flash.utils.ByteArray;   
  4.        
  5.     public class Base64 {   
  6.            
  7.         private static const BASE64_CHARS:String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";   
  8.   
  9.         public static const version:String = "1.0.0";   
  10.   
  11.         public static function encode(data:String):String {   
  12.             // Convert string to ByteArray   
  13.             var bytes:ByteArray = new ByteArray();   
  14.             bytes.writeUTFBytes(data);   
  15.                
  16.             // Return encoded ByteArray   
  17.             return encodeByteArray(bytes);   
  18.         }   
  19.            
  20.         public static function encodeByteArray(data:ByteArray):String {   
  21.             // Initialise output   
  22.             var output:String = "";   
  23.                
  24.             // Create data and output buffers   
  25.             var dataBuffer:Array;   
  26.             var outputBuffer:Array = new Array(4);   
  27.                
  28.             // Rewind ByteArray   
  29.             data.position = 0;   
  30.                
  31.             // while there are still bytes to be processed   
  32.             while (data.bytesAvailable > 0) {   
  33.                 // Create new data buffer and populate next 3 bytes from data   
  34.                 dataBuffer = new Array();   
  35.                 for (var i:uint = 0; i < 3 && data.bytesAvailable > 0; i++) {   
  36.                     dataBuffer[i] = data.readUnsignedByte();   
  37.                 }   
  38.                    
  39.                 // Convert to data buffer Base64 character positions and    
  40.                 // store in output buffer   
  41.                 outputBuffer[0] = (dataBuffer[0] & 0xfc) >> 2;   
  42.                 outputBuffer[1] = ((dataBuffer[0] & 0x03) << 4) | ((dataBuffer[1]) >> 4);   
  43.                 outputBuffer[2] = ((dataBuffer[1] & 0x0f) << 2) | ((dataBuffer[2]) >> 6);   
  44.                 outputBuffer[3] = dataBuffer[2] & 0x3f;   
  45.                    
  46.                 // If data buffer was short (i.e not 3 characters) then set   
  47.                 // end character indexes in data buffer to index of '=' symbol.   
  48.                 // This is necessary because Base64 data is always a multiple of   
  49.                 // 4 bytes and is basses with '=' symbols.   
  50.                 for (var j:uint = dataBuffer.length; j < 3; j++) {   
  51.                     outputBuffer[j + 1] = 64;   
  52.                 }   
  53.                    
  54.                 // Loop through output buffer and add Base64 characters to    
  55.                 // encoded data string for each character.   
  56.                 for (var k:uint = 0; k < outputBuffer.length; k++) {   
  57.                     output += BASE64_CHARS.charAt(outputBuffer[k]);   
  58.                 }   
  59.             }   
  60.                
  61.             // Return encoded data   
  62.             return output;   
  63.         }   
  64.            
  65.         public static function decode(data:String):String {   
  66.             // Decode data to ByteArray   
  67.             var bytes:ByteArray = decodeToByteArray(data);   
  68.                
  69.             // Convert to string and return   
  70.             return bytes.readUTFBytes(bytes.length);   
  71.         }   
  72.            
  73.         public static function decodeToByteArray(data:String):ByteArray {   
  74.             // Initialise output ByteArray for decoded data   
  75.             var output:ByteArray = new ByteArray();   
  76.                
  77.             // Create data and output buffers   
  78.             var dataBuffer:Array = new Array(4);   
  79.             var outputBuffer:Array = new Array(3);   
  80.   
  81.             // While there are data bytes left to be processed   
  82.             for (var i:uint = 0; i < data.length; i += 4) {   
  83.                 // Populate data buffer with position of Base64 characters for   
  84.                 // next 4 bytes from encoded data   
  85.                 for (var j:uint = 0; j < 4 && i + j < data.length; j++) {   
  86.                     dataBuffer[j] = BASE64_CHARS.indexOf(data.charAt(i + j));   
  87.                 }   
  88.                    
  89.                 // Decode data buffer back into bytes   
  90.                 outputBuffer[0] = (dataBuffer[0] << 2) + ((dataBuffer[1] & 0x30) >> 4);   
  91.                 outputBuffer[1] = ((dataBuffer[1] & 0x0f) << 4) + ((dataBuffer[2] & 0x3c) >> 2);           
  92.                 outputBuffer[2] = ((dataBuffer[2] & 0x03) << 6) + dataBuffer[3];   
  93.                    
  94.                 // Add all non-padded bytes in output buffer to decoded data   
  95.                 for (var k:uint = 0; k < outputBuffer.length; k++) {   
  96.                     if (dataBuffer[k+1] == 64) break;   
  97.                     output.writeByte(outputBuffer[k]);   
  98.                 }   
  99.             }   
  100.                
  101.             // Rewind decoded data ByteArray   
  102.             output.position = 0;   
  103.                
  104.             // Return decoded data   
  105.             return output;   
  106.         }   
  107.            
  108.         public function Base64() {   
  109.             throw new Error("Base64 class is static container only");   
  110.         }   
  111.     }   
  112. }  

 

访问该网站

下载类文件

Tags: as3.0, base64

« 上一篇 | 下一篇 »

只显示8条记录相关文章

6条记录访客评论

很好很强大。。只是我看不懂。。。---perry

Post by 佩里 on 2007-09-11 23:49:55 引用此文发表评论 #1

看不懂哇,我看的懂。就是很好很强大很简洁。这个都不懂,才土哦

Post by 可乐爱喝我 on 2007-09-12 21:42:26 引用此文发表评论 #2

中文还是不行啊。愁人

Post by jason on 2008-02-20 17:39:02 引用此文发表评论 #3

我试过了` 支持中文啊

Post by bug on 2008-09-28 16:30:32 引用此文发表评论 #4

中文不行啊
上面的代码     中国  =>    5Lit5Zu9
正确的应该是  中国  =>    1tC5+g==

Post by ajin on 2009-12-17 10:19:40 引用此文发表评论 #5

引用 ajin 说过的话:
中文不行啊
上面的代码     中国  =>    5Lit5Zu9
正确的应该是  中国  =>    1tC5+g==

这是utf-8下的编码。你所谓正确的那个1tC5+g==是gb2312下的编码。

Post by cordy on 2009-12-17 16:01:22 引用此文发表评论 #6


发表评论

提出问题前请先搜索一下以前的文章和评论。
对于重复问题一律不予回答。
点此进入搜索页

评论内容 (必填):