AS3的BASE64编码与解码类

时间:2020-12-31 18:05:51

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

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

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

调用代码:

import com . dynamicflash . utils . Base64 ;     

//编码和解码字符串      


var source : String = "Hello, world" ;      

var encoded : String = Base64 . encode ( source );      

trace
( encoded );      

     

var decoded : String = Base64 . decode ( encoded );      

trace
( decoded );      

   

//编码和解码ByteArray      

var obj : Object = { name : "Dynamic Flash" , url : "http://dynamicflash.com" };    

var source : ByteArray = new ByteArray ();    

source
. writeObject ( obj );    

   

var encoded : String = Base64 . encodeByteArray ( source );    

trace
( encoded );    

   

var decoded : ByteArray = Base64 . decodeToByteArray ( encoded );    

obj
= decoded . readObject ();    

trace
( obj . name + "(" + obj . url + ")" );  

 

-----------------------------------------------------------------------------------------------------------------
Base64类代码:

package com . dynamicflash . util {    

   

   
import flash . utils . ByteArray ;    

       

   
public class Base64 {    

           

       
private static const BASE64_CHARS : String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=" ;    

   

       
public static const version : String = "1.0.0" ;    

   

       
public static function encode ( data : String ): String {    

           
// Convert string to ByteArray    

           
var bytes : ByteArray = new ByteArray ();    

            bytes
. writeUTFBytes ( data );    

               

           
// Return encoded ByteArray    

           
return encodeByteArray ( bytes );    

       
}    

           

       
public static function encodeByteArray ( data : ByteArray ): String {    

           
// Initialise output    

           
var output : String = "" ;    

               

           
// Create data and output buffers    

           
var dataBuffer : Array ;    

           
var outputBuffer : Array = new Array ( 4 );    

               

           
// Rewind ByteArray    

            data
. position = 0 ;    

               

           
// while there are still bytes to be processed    

           
while ( data . bytesAvailable > 0 ) {    

               
// Create new data buffer and populate next 3 bytes from data    

                dataBuffer
= new Array ();    

               
for ( var i : uint = 0 ; i < 3 && data . bytesAvailable > 0 ; i ++) {    

                    dataBuffer
[ i ] = data . readUnsignedByte ();    

               
}    

                   

               
// Convert to data buffer Base64 character positions and    

               
// store in output buffer    

                outputBuffer
[ 0 ] = ( dataBuffer [ 0 ] & 0xfc ) >> 2 ;    

                outputBuffer
[ 1 ] = (( dataBuffer [ 0 ] & 0x03 ) << 4 ) | (( dataBuffer [ 1 ]) >> 4 );    

                outputBuffer
[ 2 ] = (( dataBuffer [ 1 ] & 0x0f ) << 2 ) | (( dataBuffer [ 2 ]) >> 6 );    

                outputBuffer
[ 3 ] = dataBuffer [ 2 ] & 0x3f ;    

                   

               
// If data buffer was short (i.e not 3 characters) then set    

               
// end character indexes in data buffer to index of '=' symbol.    

               
// This is necessary because Base64 data is always a multiple of    

               
// 4 bytes and is basses with '=' symbols.    

               
for ( var j : uint = dataBuffer . length ; j < 3 ; j ++) {    

                    outputBuffer
[ j + 1 ] = 64 ;    

               
}    

                   

               
// Loop through output buffer and add Base64 characters to    

               
// encoded data string for each character.    

               
for ( var k : uint = 0 ; k < outputBuffer . length ; k ++) {    

                    output
+= BASE64_CHARS . charAt ( outputBuffer [ k ]);    

               
}    

           
}    

               

           
// Return encoded data    

           
return output ;    

       
}    

           

       
public static function decode ( data : String ): String {    

           
// Decode data to ByteArray    

           
var bytes : ByteArray = decodeToByteArray ( data );    

               

           
// Convert to string and return    

           
return bytes . readUTFBytes ( bytes . length );    

       
}    

           

       
public static function decodeToByteArray ( data : String ): ByteArray {    

           
// Initialise output ByteArray for decoded data    

           
var output : ByteArray = new ByteArray ();    

               

           
// Create data and output buffers    

           
var dataBuffer : Array = new Array ( 4 );    

           
var outputBuffer : Array = new Array ( 3 );    

   

           
// While there are data bytes left to be processed    

           
for ( var i : uint = 0 ; i < data . length ; i += 4 ) {    

               
// Populate data buffer with position of Base64 characters for    

               
// next 4 bytes from encoded data    

               
for ( var j : uint = 0 ; j < 4 && i + j < data . length ; j ++) {    

                    dataBuffer
[ j ] = BASE64_CHARS . indexOf ( data . charAt ( i + j ));    

               
}    

                   

               
// Decode data buffer back into bytes    

                outputBuffer
[ 0 ] = ( dataBuffer [ 0 ] << 2 ) + (( dataBuffer [ 1 ] & 0x30 ) >> 4 );    

                outputBuffer
[ 1 ] = (( dataBuffer [ 1 ] & 0x0f ) << 4 ) + (( dataBuffer [ 2 ] & 0x3c ) >> 2 );            

                outputBuffer
[ 2 ] = (( dataBuffer [ 2 ] & 0x03 ) << 6 ) + dataBuffer [ 3 ];    

                   

               
// Add all non-padded bytes in output buffer to decoded data    

               
for ( var k : uint = 0 ; k < outputBuffer . length ; k ++) {    

                   
if ( dataBuffer [ k + 1 ] == 64 ) break ;    

                    output
. writeByte ( outputBuffer [ k ]);    

               
}    

           
}    

               

           
// Rewind decoded data ByteArray    

            output
. position = 0 ;    

               

           
// Return decoded data    

           
return output ;    

       
}    

           

       
public function Base64 () {    

           
throw new Error ( "Base64 class is static container only" );    

       
}    

   
}    

}  

 

 

下载类文件