- 浏览: 50869 次
- 性别:
- 来自: 天津
最近访客 更多访客>>
文章分类
最新评论
-
HenryYu:
是字符编码搞错了
XXTEA 加密算法的 Java 实现 -
HenryYu:
是用了一下,抛错也,是这样使用的吗?
public stati ...
XXTEA 加密算法的 Java 实现
Serializable.as
ActionScript代码
/**********************************************************\ | | | The implementation of PHPRPC Protocol 3.0 | | | | Serializable.as | | | | Release 3.0.0 | | Copyright (c) 2005-2007 by Team-PHPRPC | | | | WebSite: http://www.phprpc.org/ | | http://www.phprpc.net/ | | http://www.phprpc.com/ | | http://sourceforge.net/projects/php-rpc/ | | | | Authors: Ma Bingyao <andot@ujn.edu.cn> | | | | This file may be distributed and/or modified under the | | terms of the GNU Lesser General Public License (LGPL) | | version 3.0 as published by the Free Software Foundation | | and appearing in the included file LICENSE. | | | \**********************************************************/ /* Serializable interface for custom PHP serialize. * * Copyright (C) 2006-2007 Ma Bingyao <andot@ujn.edu.cn> * Version: 3.0 * LastModified: Oct 23, 2007 * This library is free. You can redistribute it and/or modify it. */ package org.phprpc.util{ import flash.utils.ByteArray; public interface Serializable { function serialize():ByteArray; function unserialize(ss:ByteArray):void; } }
PHPSerializer.as
ActionScript代码
/**********************************************************\ | | | The implementation of PHPRPC Protocol 3.0 | | | | PHPSerializer.as | | | | Release 3.0.0 | | Copyright (c) 2005-2007 by Team-PHPRPC | | | | WebSite: http://www.phprpc.org/ | | http://www.phprpc.net/ | | http://www.phprpc.com/ | | http://sourceforge.net/projects/php-rpc/ | | | | Authors: Ma Bingyao <andot@ujn.edu.cn> | | | | This file may be distributed and/or modified under the | | terms of the GNU Lesser General Public License (LGPL) | | version 3.0 as published by the Free Software Foundation | | and appearing in the included file LICENSE. | | | \**********************************************************/ /* PHP serialize/unserialize library for ActionScript 3.0. * * Copyright (C) 2006-2007 Ma Bingyao <andot@ujn.edu.cn> * Version: 3.0 * LastModified: Nov 6, 2007 * This library is free. You can redistribute it and/or modify it. */ package org.phprpc.util { import org.phprpc.util.Serializable; import flash.utils.ByteArray; import flash.utils.Dictionary; import flash.utils.getQualifiedClassName; import flash.utils.getDefinitionByName; public class PHPSerializer { private static function isInteger(s:String):Boolean { var i:int; var l:int = s.length; if (l > 11) { return false; } for (i = (s.charAt(0) == '-') ? 1 : 0; i < l; i++) { switch (s.charAt(i)) { case '0' : case '1' : case '2' : case '3' : case '4' : case '5' : case '6' : case '7' : case '8' : case '9' : break; default : return false; } } var n:Number = Number(s); return !(n < -2147483648 || n > 2147483647); } public static function getClassName(o:*):String { var className:String = getQualifiedClassName(o); return className.replace(/\./g, '_').replace(/\:\:/g, '_'); } private static function getObjectOfClass(cn:Array, poslist:Array, i:uint, c:String):Object { if (i < poslist.length) { var pos:uint = poslist[i]; cn[pos] = c; var obj:Object = getObjectOfClass(cn, poslist, i + 1, '.'); if (i + 1 < poslist.length) { if (obj == null) { obj = getObjectOfClass(cn, poslist, i + 1, '_'); } } return obj; } var classname:String = cn.join(''); try { return new (flash.utils.getDefinitionByName(classname) as Class); } catch (e:Error) { }; return null; } public static function createObjectOfClass(classname:String):Object { try { return new (flash.utils.getDefinitionByName(classname) as Class); } catch (e:Error) {} var poslist:Array = []; var pos:int = classname.indexOf("_"); while (pos > -1) { poslist[poslist.length] = pos; pos = classname.indexOf("_", pos + 1); } if (poslist.length > 0) { var cn:Array = classname.split(''); var obj:Object = getObjectOfClass(cn, poslist, 0, '.'); if (obj == null) { obj = getObjectOfClass(cn, poslist, 0, '_'); } if (obj != null) { return obj; } } return {name:classname}; } public static function serialize(o:Object):ByteArray { var sb:ByteArray = new ByteArray(); var ht:Dictionary = new Dictionary(); var hv:uint = 1; function _serializeNull():void { sb.writeUTFBytes('N;'); } function _serializeBoolean(b:Boolean):void { sb.writeUTFBytes(b ? 'b:1;' : 'b:0;'); } function _serializeInteger(i:int):void { sb.writeUTFBytes('i:' + i + ';'); } function _serializeDouble(d:Number):void { var s:String; if (isNaN(d)) { s = 'NAN'; } else if (d == Number.POSITIVE_INFINITY) { s = 'INF'; } else if (d == Number.NEGATIVE_INFINITY) { s = '-INF'; } else { s = d.toString(10); } sb.writeUTFBytes('d:' + s + ';'); } function _serializeByteArray(ba:ByteArray):void { ba.position = 0; sb.writeUTFBytes('s:' + ba.length + ':"'); sb.writeBytes(ba); sb.writeUTFBytes('";'); } function _serializeString(s:String):void { var utf8:ByteArray = new ByteArray(); utf8.writeUTFBytes(s); sb.writeUTFBytes('s:' + utf8.length + ':"'); sb.writeBytes(utf8); sb.writeUTFBytes('";'); } function _serializeDate(dt:Date):void { sb.writeUTFBytes('O:11:"PHPRPC_Date":7:{'); sb.writeUTFBytes('s:4:"year";'); _serializeInteger(dt.getFullYear()); sb.writeUTFBytes('s:5:"month";'); _serializeInteger(dt.getMonth() + 1); sb.writeUTFBytes('s:3:"day";'); _serializeInteger(dt.getDate()); sb.writeUTFBytes('s:4:"hour";'); _serializeInteger(dt.getHours()); sb.writeUTFBytes('s:6:"minute";'); _serializeInteger(dt.getMinutes()); sb.writeUTFBytes('s:6:"second";'); _serializeInteger(dt.getSeconds()); sb.writeUTFBytes('s:11:"millisecond";'); _serializeInteger(dt.getMilliseconds()); sb.writeUTFBytes('}'); } function _serializeArray(a:Object):void { var k:String; var l:uint = 0; for (k in a) l++; sb.writeUTFBytes('a:' + l + ':{'); for (k in a) { if (typeof (a[k]) != 'function') { isInteger(k) ? _serializeInteger(k) : _serializeString(k); _serialize(a[k]); } } sb.writeUTFBytes('}'); } function _serializeObject(o:Object, cn:String):void { var c:Serializable = o as Serializable; var cnb:ByteArray = new ByteArray(); cnb.writeUTFBytes(cn); if (c == null) { sb.writeUTFBytes('O:' + cnb.length + ':"'); sb.writeBytes(cnb); var k:String; var l:uint = 0; for (k in o) l++; sb.writeUTFBytes('":' + l + ':{'); for (k in o) { if (typeof(o[k]) != 'function') { _serializeString(k); _serialize(o[k]); } } sb.writeUTFBytes('}'); } else { var data:ByteArray = c.serialize(); sb.writeUTFBytes('C:' + cnb.length + ':"'); sb.writeBytes(cnb); sb.writeUTFBytes('":' + data.length + ':{'); sb.writeBytes(data); sb.writeUTFBytes('}'); } } function _serializePointRef(R:uint):void { sb.writeUTFBytes('R:' + R + ';'); } function _serializeRef(r:uint):void { sb.writeUTFBytes('r:' + r + ';'); } function _serialize(o:*):void { if (typeof (o) == "undefined" || o == null || o.constructor == Function) { hv++; _serializeNull(); return; } var className:String = getClassName(o); switch (o.constructor) { case Boolean : hv++; _serializeBoolean(o); break; case Number : hv++; isInteger(o) ? _serializeInteger(o) : _serializeDouble(o); break; case String : hv++; _serializeString(o); break; case ByteArray : hv++; _serializeByteArray(o); break; case Date : hv++; _serializeDate(o); break; default : var r:int = ht[o]; if (className == "Object" || o.constructor == Array) { if (r) { _serializePointRef(r); } else { ht[o] = hv++; _serializeArray(o); } } else { if (r) { hv++; _serializeRef(r); } else { ht[o] = hv++; _serializeObject(o, className); } } break; } } _serialize(o); return sb; } public static function unserialize(sb:ByteArray):* { var ht:Dictionary = new Dictionary(); var hv:int = 1; function _readNumber():String { var s:String = ''; var c:String = sb.readUTFBytes(1); while ((c != ';') && (c != ':')) { s += c; c = sb.readUTFBytes(1); } return s; } function _unserializeNull():Object { sb.position++; return null; } function _unserializeBoolean():Boolean { sb.position++; var b:Boolean = (sb.readUTFBytes(1) == '1'); sb.position++; return b; } function _unserializeInteger():int { sb.readByte(); var i:int = parseInt(_readNumber()); return i; } function _unserializeDouble():Number { sb.position++; var d:Number; var s:String = _readNumber(); switch (s) { case 'NAN' : d = Number.NaN; break; case 'INF' : d = Number.POSITIVE_INFINITY; break; case '-INF' : d = Number.NEGATIVE_INFINITY; break; default : d = parseFloat(s); } return d; } function _unserializeByteArray():ByteArray { sb.position++; var l:uint = parseInt(_readNumber()); sb.position++; var ba:ByteArray = new ByteArray(); if (l > 0) { sb.readBytes(ba, 0, l); } sb.position += 2; return ba; } function _unserializeString():String { sb.position++; var l:uint = parseInt(_readNumber()); sb.position++; var s:String = sb.readUTFBytes(l); sb.position += 2; return s; } function _unserializeEscapedString(len:int):String { sb.position++; var l:uint = parseInt(_readNumber()); sb.position++; var i:int; var s:Array = new Array(l); for (i = 0; i < l; i++) { if ((s[i] = sb.readUTFBytes(1)) == '\\') { s[i] = String.fromCharCode(parseInt(sb.readUTFBytes(len), 16)); } } sb.position += 2; return s.join(''); } function _unserializeArray():Array { sb.position++; var n:int = parseInt(_readNumber()); sb.position++; var i:int; var k:*; var a:Array = []; ht[hv++] = a; for (i = 0; i < n; i++) { switch (sb.readUTFBytes(1)) { case 'i' : k = _unserializeInteger(); break; case 's' : k = _unserializeString(); break; case 'S' : k = _unserializeEscapedString(2); break; case 'U' : k = _unserializeEscapedString(4); break; default : return null; } a[k] = _unserialize(); } sb.position++; return a; } function _unserializeDate(n:int):Date { var i:int; var k:String; var a:Object = {}; for (i = 0; i < n; i++) { switch (sb.readUTFBytes(1)) { case 's' : k = _unserializeString(); break; case 'S' : k = _unserializeEscapedString(2); break; case 'U' : k = _unserializeEscapedString(4); break; default : return null; } if (sb.readUTFBytes(1) == 'i') { a[k] = _unserializeInteger(); } else { return null; } } sb.position++; var dt:Date = new Date(a.year, a.month - 1, a.day, a.hour, a.minute, a.second, a.millisecond); ht[hv++] = dt; return dt; } function _unserializeObject():* { sb.position++; var l:uint = parseInt(_readNumber()); sb.position++; var cn:String = sb.readUTFBytes(l); sb.position += 2; var n:uint = parseInt(_readNumber()); sb.position++; if (cn == "PHPRPC_Date") { return _unserializeDate(n); } var i:int; var k:String; var o:Object = createObjectOfClass(cn); ht[hv++] = o; for (i = 0; i < n; i++) { switch (sb.readUTFBytes(1)) { case 's' : k = _unserializeString(); break; case 'S' : k = _unserializeEscapedString(2); break; case 'U' : k = _unserializeEscapedString(4); break; default : return false; } if (k.charAt(0) == '\0') { k = k.substring(k.indexOf('\0', 1) + 1, k.length); } o[k] = _unserialize(); } sb.position++; return o; } function _unserializeCustomObject():* { sb.position++; sb.position++; var l:uint = parseInt(_readNumber()); sb.position++; var cn:String = sb.readUTFBytes(l); sb.position += 2; var n:uint = parseInt(_readNumber()); sb.position++; var data:ByteArray = new ByteArray(); sb.readBytes(data, 0, n); sb.position++; var o:Object = createObjectOfClass(cn); var c:Serializable = o as Serializable; if (c == null) { o.data = data; return o; } c.unserialize(data); return c; } function _unserializeRef():* { sb.position++; var r:uint = parseInt(_readNumber()); return ht[r]; } function _unserialize():* { var result:*; switch (sb.readUTFBytes(1)) { case 'N' : result = _unserializeNull(); ht[hv] = result; hv++; return result; case 'b' : result = _unserializeBoolean(); ht[hv] = result; hv++; return result; case 'i' : result = _unserializeInteger(); ht[hv] = result; hv++; return result; case 'd' : result = _unserializeDouble(); ht[hv] = result; hv++; return result; case 's' : result = _unserializeByteArray(); ht[hv] = result; hv++; return result; case 'S' : result = _unserializeEscapedString(2); ht[hv] = result; hv++; return result; case 'U' : result = _unserializeEscapedString(4); ht[hv] = result; hv++; return result; case 'r' : result = _unserializeRef(); ht[hv] = result; hv++; return result; case 'a' : return _unserializeArray(); case 'O' : return _unserializeObject(); case 'C' : return _unserializeCustomObject(); case 'R' : return _unserializeRef(); } return false; } sb.position = 0; return _unserialize(); } } }
发表评论
-
FMS3帮助
2009-11-11 12:04 739FMS3帮助 -
Base64 for ActionScript 3.0
2009-11-11 11:56 1636/****************************** ... -
XXTEA for ActionScript 3.0 (数据加密)
2009-11-11 11:42 2326/****************************** ... -
as3鼠标控制人物移动
2009-11-11 11:31 2260var speed:uint=5; var mx var ... -
as3和js交互
2009-11-11 11:05 1065<!DOCTYPE html PUBLIC " ... -
AS3 loading
2009-11-11 10:45 1197AS2的时候做LOADING有很多种方法,做起来也得心应手 ... -
Flash AS3 截图后生成图片到本地 (附带flex版)
2009-11-11 10:22 3864import mx.graphics.codec.JPEGEn ... -
学习Flash相关站点资源
2009-11-11 10:17 667FLASH - 嘎嘎的博客 http://www.5ga.c ...
相关推荐
如果你需要获得ActionScript3.0对象序列化方面的代码样例,你应该下载该文档。
第7章ActionScript3.0中的日期和时间 139 7.1日期与时间 139 7.1.1创建日期对象 139 7.1.2日期对象的属性与方法 140 7.1.3日期格式化 143 7.2时间间隔 144 7.2.1使用Timer类 144 7.2.2秒表示例 146 7.3小结 149 第8...
Hprose (High Performance Remote Object Service Engine)是一款高性能跨语言跨平台的远程对象服务引擎,它支持众多语言和平台,包括主流的.NET、Java、PHP、Python、Ruby、JavaScript、ActionScript、Delphi、...
这些包括用于MD5和SHA 1哈希,图像编码器和JSON序列化的类,以及常规的String,Number和Date API。 -flixel是一个免费的Actionscript(Flash)库,我从过去几年中开发的各种Flash游戏(包括Gravity Hook,Fathom和...
它提供了高效的序列化和反序列化库,并在此基础上提供了方便灵活的RPC引擎。 Hprose支持众多编程语言,例如: AAuto Quicker ActionScript ASP C++ Dart Delphi/Free Pascal dotNET(C#, Visual Basic...) Golang ...
它可以序列化和反序列化您的数据。 数据与ByteArray字节流共享,从而允许您通过调用ByteArray的构造函数来直接进行处理,这非常方便。 十进制值 该库还支持IEEE 754值,以防您需要使某些对象浮点数。 压缩和解压缩 ...
枚举,随机,反射,序列化,加密,音频系统,HTTP请求。 反射库专门用于生产环境,目前正在生产环境中使用。 入门 下载,或在您的项目中克隆仓库和参考。 外部依赖 没有任何 blooddy-crypto与nexuslib.swc静态链接...
as3-msgpack v1.0.1 as3-msgpack是针对Actionscript3语言(Flash,Flex和AIR)的MessagePack规范的实现。 入门: : 下载最新版本: : 请参阅在线文档: : 检查愿望清单: : 关于消息包格式MessagePack是一种有效的...
模型定义存储为文本文件,易于阅读和维护。 使用简单的 Python 脚本,将数据转换为易于监控的 Actionscript 类。 要求 演示示例 演示/src/Player.yaml Player: name: String commanders: ManagedArray gold:...
有很多不同的对象类型(有关列表,请参见scripts/obj_ids.py ),每个对象都有自己的读/写功能,用于反序列化/序列化。 该代码全部用ActionScript3编写,可以使用ffdec进行反编译。 将反编译的源代码写入./...
引擎的序列化/反序列化。 -用于内部通信的信号。 [此软件包是必需的,并且由内核安装] -勾号提供者。 [推荐的] -用于Ash的可选工具。 发展历程 首次安装: $ npm i $ npm run build 一次测试: $ npm run ...
发送命令自动序列化/反序列化 创建自己的命令 允许轻松地以不同方式共享文件(p2p,直接流,DHT) 在组环中找到另一个用户 等等。 您可以使用Circulate 在不同客户端之间共享文件 同步不同的设备和/或屏幕 创建...
AMF(Action Message Format 动作信息格式)是用来序列化AS(ActionScript 动作脚本)实例对象(object graphs)的压缩的二进制格式。序列化的AMF编码的实例对象可用来持久化,并且在不同的会话中获得应用的公共状态,或者...
总有人问我关于Flex对象序列化和持久化的问题,很多人认为对象不能拷贝到服务器,其实浅度的拷贝是可以做到的。
用于远程处理PHP和ActionScript代码-它允许从Flash电影中远程调用PHP方法。 无需PHP扩展。 多语言支持,定时反序列化。 需要PHP 4.0.5或更高!
高性能和低延迟是通过使用持久性 TCP/IP 套接字和 Flash 的本机序列化格式 (AMF) 实现的。 由于使用 AMF,您可以通过网络发送原语、散列、数组,甚至您的自定义类。 AMF Socket 试图通过隐藏尽可能多的细节来成为 ...
nfs-rpc是一个集成了各种知名通信框架的高性能RPC框架,目前其最好的性能为在采用grizzly作为通信框架,采用pb作为序列化/反序列化时,tps为168k次/秒。 其支持的功能主要为: 1、透明的调用远端服务器提供的功能...
nfs-rpc是一个集成了各种知名通信框架的高性能RPC框架,目前其最好的性能为在采用grizzly作为通信框架,采用pb作为序列化/反序列化时,tps为168k次/秒。 其支持的功能主要为: 1、透明的调用远端服务器提供的功能...
nfs-rpc是一个集成了各种知名通信框架的高性能RPC框架,目前其最好的性能为在采用grizzly作为通信框架,采用pb作为序列化/反序列化时,tps为168k次/秒。 其支持的功能主要为: 1、透明的调用远端服务器提供的功能...
nfs-rpc是一个集成了各种知名通信框架的高性能RPC框架,目前其最好的性能为在采用grizzly作为通信框架,采用pb作为序列化/反序列化时,tps为168k次/秒。 其支持的功能主要为: 1、透明的调用远端服务器提供的功能...