2012-03-15 26 views
0

我想序列化一個對象到AMF,並且我想要的結果與NetConnection.call()序列化的結果完全一樣。因此,我使用ByteArray.writeObject(),輸出字節通常與NetConnection.call()發送的字節相同,但有時幾個字節不同。我注意到ByteArray.writeObject使用一個版本的AMF來編碼整個對象,與NetConnection不同,ByteArray不是在AMF 0中開始,而是切換到AMF 3(設置了objectEncoding屬性AMF 3)「。它解釋了這種差異。序列化爲AMF就像NetConnection一樣

我該如何解決這個問題?

+1

小提示:檢查AMFPHP,PHP編碼器是如何工作的,因爲它使用NetConnection => php編碼。 – turbosqel 2012-03-15 08:20:57

回答

1

NetConnection.call的工作方式以及如何構建有效的請求和響應在第4節的AMF0 specs中詳細記錄。NetConnection.call具有一些附加功能,如標題,RPC方法名稱以及是否該請求已成功或出現錯誤。這就是爲什麼你不能只使用writeObject來創建一個有效的請求。

關於從AMF0切換到AMF3的一點是因爲並非每個AS3對象都可以在AMF0中沒有數據丟失的情況下進行寫入,但原始的Flash Player都假定該主體位於AMF0中。在編碼過程中,如果您已指定要使用AMF3進行編碼,則會在AMF3模式下調用writeObject之前寫出AMF0至AMF3標記(0x11)。

相關問題