registerClassAlias在利用AMF3進行序列話網路通訊中,是非常有用的。需要把用戶端的對象直接傳送到伺服器得時候,保留該對象的類(類型)。 這樣的話,就可以傳送自訂對象或者系統內建對象。
具體的使用方法,官方有詳細地用法。這裡我只說說自己的一些理解。
readObject方法對構造器有參數的類,是會出錯的,會彈出參數數量不匹配這個錯誤。因為還原對象進行反射的時候,是預設沒有參數的給構造器的。這也是有些人 討論Sprite等對象不能進行深度拷貝的原因
所以在使用AMF3進行序列話的時候要注意這個了,還有一個就是,如果那個類包含了多個類,也就是個複合類,那麼裡面的那個複合類,也必須進行registerClassAlias,例如
- package
- {
- import flash.geom.Point;
-
- public class Test
- {
- public var name:String;
- public var point:Point;
- }
- }
- 這樣需要寫兩條語句才能完全把Test序列化
- registerClassAlias("point",Point);
- registerClassAlias("test",Test)
具體使用例子,參考官方例子,下面是摘錄出來的
此樣本使用 registerClassAlias() 函數為 ExampleClass 註冊一個別名
( com.example.eg )。 由於為類註冊了別名,因此可以將對象作為 ExampleClass 的執行個體還原序列化,且代碼將輸出
true。 如果刪除 registerClassAlias() 調用,則代碼將輸出 false
- package {
- import flash.display.Sprite;
- import flash.net.registerClassAlias;
- import flash.utils.ByteArray;
- public class RegisterClassAliasExample extends Sprite {
- public function RegisterClassAliasExample() {
- registerClassAlias("com.example.eg", ExampleClass);
- var eg1:ExampleClass = new ExampleClass();
- var ba:ByteArray = new ByteArray();
- ba.writeObject(eg1);
- ba.position = 0;
- var eg2:* = ba.readObject();
- trace(eg2 is ExampleClass); // true
- }
- }
- }