1. 程式人生 > >flex和java實體類的對映關係(blazeds方式通訊)

flex和java實體類的對映關係(blazeds方式通訊)

 大家都知道,例項對映只要加上如[RemoteClass(alias="com.samples.product.Product")]這樣的標籤就可以前後對應了,但是裡面的具體過程很多人不明白。如果java端對應的實體類只有一個有引數的建構函式的話,後臺就會報:Unable to create a new instance of type 'myhotel.Room'. Detail: Types cannot be instantiated without a public, no arguments constructor——也就是被連線的Java類找不到對應的無參建構函式。

       原因是,如果只有一個有引數建構函式的話無參的建構函式不起作用

Blazeds的呼叫Java函式的機制就是通過java的建立Java類的一個例項,然後再由例項呼叫對應需要的函式。所以當你要使用Blazeds連線java類,要在這個類裡面建立一個無參建構函式,當然你可以選擇什麼都不做(即不自己手動寫有參的建構函式,否則你需要寫兩個,有參和無參的)。。

       AMF(Action Message Format)是一種 binary format的資料型態,透過 AMF over HTTP的方式將flash端資料編碼後傳回server,server端的remoting adaptor接收到資料後則會譯碼回正確的native物件,交給正確的程式處理。
       AMF除了用於Flash remoting外,也廣泛的用於 Local Connection 與 Flash communication server,它最大的特色在於可直接將flash native object,例如Object, Array, Date, XML,傳回server端,並且在server端自動進行轉譯成適當的物件,例如flash 的Array傳回PHP時就會自動轉換為 Associative Array;這個特色對開發者最大的好處在於不需要再人工處理serialization 與 deserialization的繁複工作,不但精確度更高,同時開發也更省時間。


       由於AMF是binary format並且編碼時經過高度壓縮,因此非常適合用來傳遞大量的資料,根據flashorb網站的測試(主要針對web service與flash remoting),當資料量越大時,flash remoting的傳輸效能就越高,遠遠超過web service的表現,因此同樣的道理也可得知xml, loadVars, loadVariables 等使用plaine text format的傳輸方式自然也無可比擬。