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

版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://programmer.blogbus.com/logs/36436446.html

在国外网站上淘到一个很好用的AS3的BASE64类感觉写得简洁而强大。很好,赶快放上来。

调用代码:

01  import com.dynamicflash.utils.Base64;     
02  //编码和解码字符串  
03  var source: String =  "Hello, world";     
04  var encoded: String = Base64. encode(source);     
05 trace(encoded);     
06  var decoded: String = Base64. decode(encoded);     
07 trace(decoded);    
08  //编码和解码ByteArray  
09  var obj: Object= {name: "Dynamic Flash",url: "http://dynamicflash.com"};  
10  var source: ByteArray =  new  ByteArray();  
11 source. writeObject(obj);  
12  var encoded: String = Base64. encodeByteArray(source);  
13 trace(encoded);  
14  var decoded: ByteArray = Base64. decodeToByteArray(encoded);  
15 obj = decoded. readObject();  
16 trace(obj. name +  "(" + obj. url +  ")");

    Base64类代码:

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

     

    下载类文件

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

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值