一千萬個為什麽

搜索

用不同語言編寫的2個程序之間的通信 - 序列化?

何時在兩個不同的機器/網絡/互聯網上的程序之間進行通信時需要序列化,編組等?

假設我在java/flash中有一個客戶端程序,在C中有一個服務器程序。我不能使用自己的自定義協議實現通信嗎?我猜是這樣。何時需要序列化等?我知道Java RMI,CORBA等都有這些機制。但為什麽?這是必須的嗎?請賜教?

最佳答案

程序中的對象具有明確定義的內存布局,由編譯器強加。但是這個布局在另一個程序中不會完全相同,在另一臺機器上運行,由不同的編譯器編譯。並且它通常與傳輸介質不兼容,如網絡連接或文件。您需要註意將對象從一臺機器轉移到另一臺機器。

文件和網絡數據包是簡單的字節流。這就是序列化發揮作用的地方,你需要將內存中的對象序列化為字節流。它需要在接收端反序列化,從字節流返回到對象。

顯而易見的方法是二進制序列化。您可以獲取對象中每個字段的字節數,並將它們寫入流中。效率很高,但也很麻煩。遇到的第一個問題是接收端對對象的外觀有不同的看法。它可能使用不同版本的對象聲明進行編譯,例如,它具有添加的字段。在不同機器之間交換對象時,問題就越嚴重。他們可能對整數中的字節數有不同的看法。或者字節的順序(endian-ness)。

已經有許多解決此問題的方法。它們通常涉及描述對象中字段的某種元數據。 Unicode的出現使得將元數據和字段值都放入文本描述成為可能,XML就是最好的例子。

轉載註明原文: 用不同語言編寫的2個程序之間的通信 - 序列化?