如何獲取AMF3物件類名

2021-09-30 07:53:03 字數 1516 閱讀 8605

對不熟悉amf3的人來說,這名詞有點玄乎,amf3不過兩個函式而已

//編碼(把物件序列化成amf3)

1 batearray.writeobject(obj:object):void

//解碼 (反序列化,獲取物件)

2 batearray.readobject():object

如果需要序列化的物件就是乙個雜湊map(key-value的集合),那麼一切正常

但是如果你要序列化乙個class,同時把這個class的類名也序列化到bytearray中,那麼

光 是batearray.writeobject是不能滿足需求的,如果需要寫的物件是乙個class的例項,writeobject則會把這個class 裡面的public變數抽出來放入到乙個新的雜湊map裡(object),在object裡新建與類的public成員變數同名的動態屬性,並賦值,例 如乙個modeclass類,它有兩個屬性:

private var id:int = 10000;

public var nick:string = "wewell"

當把這個類的例項打包成amf3的時候,實際狀況其實變成了這樣:

batearray.readobject({nick:"wewell"})

這樣,打包的amf3物件其實已經沒有了類名(同時,static成員,const的成員,private成員,所有方法,包括public get 方法都會被忽略掉)

而如果為了實現一些類似rpc的呼叫過程,直接打類打包時,這就要搬外援了,這個外援就是:

public function registerclassalias(aliasname:string, classobject:class):void

在writeobject之前,對需要打包的類呼叫一次registerclassalias,就能達到訪問類的目的了(get方法的值也可正常訪問)

示例**:

//amf3物件編碼

registerclassalias("modeclass", modeclass);

var modeclass:modeclass = new modeclass();

var ba:bytearray = new bytearray();

ba.writeobject(modeclass); //預設情況下把類的public變數抽出來打包成乙個map (public變數對應object動態屬性)

//amf3物件解碼

ba.position = 0;

var mode:* = ba.readobject();

trace(mode is modeclass);//true

trace(ba.tostring());

trace(getqualifiedclassname(mode));//modeclass

//var cls:class = getclassbyalias(getqualifiedclassname(mode));

//var amf:object = new cls() as modeclass;

類和物件 3 物件初始化列表

物件初始化列表出現原因 1.必須這樣做 如果我們有乙個類成員,它本身是乙個類或者是乙個結構,而且這個成員它只有乙個帶引數的建構函式,沒有預設建構函式。這時要對這個類成員進行初始化,就必須呼叫這個類成員的帶引數的建構函式,如果沒有初始化列表,那麼他將無法完成第一步,就會報錯。2 類成員中若有const...

專案3 物件陣列操作長方柱類

檔名稱 完成日期 2014年3月24日 版本號 v0.1 對任務及求解方法的描述部分 輸入描述 無 問題描述 程式輸入 程式輸出 問題分析 演算法設計 我的程式 include include using namespace std class bulk bulk bulk double x 1.0...

java基礎類庫(九) 3 物件轉殖

知識點 1.清楚物件轉殖的操作結構 2.鞏固介面的作用 具體內容 物件轉殖就是乙個物件複製操作,再object類裡面專門提供有乙個專門的轉殖方法 物件轉殖 protected object clone throws clonenotsupportedexception 注 protected本包和不...