2013-08-02 34 views
3

我是一名編程初學者,我只是想知道序列化過程和轉換字節代碼(中間語言)的過程是否有區別。序列化與字節代碼轉換

我發現這對javacodegeeks.com:

序列化通常是用來當需要的時候來發送數據 通過網絡或存儲在文件中。通過數據我的意思是對象而不是文本。 現在的問題是您的網絡基礎架構和您的硬盤是 硬件組件,它們理解位和字節,但不理解對象的Java 對象。序列化是Java對象的 值/狀態轉換爲通過網絡發送或保存的字節。 - >另請參閱 反序列化是將字節碼轉換爲 對應的java對象。 < -

從我這一段的理解,系列化可能是由它的Java程序轉換成字節碼傳輸到不同的計算機環境的能力,仍然正常工作的過程。

我正確的想這個嗎?

回答

6

從我對本段的理解中,序列化可能是java將程序轉換爲字節碼以便傳輸到不同計算機環境並仍能正常工作的過程。我是否認爲這是正確的?

不,用javac編譯會創建在JVM上運行的字節碼。虛擬機(如JVM)對字節碼進行處理,並使用一些巧妙而複雜的即時編譯(依賴於機器/平臺)來爲您提供最終產品。看字節碼只是JVM解釋的一堆instructions。每個字節碼操作碼的長度都是一個字節,因此稱爲字節碼。

另一方面,序列化將Java對象的狀態轉換爲字節流。這些字節不是字節碼之類的指令。 Java序列化的主要目的是將一個對象寫入一個流中,以便它可以通過網絡傳輸並且該對象可以重新進行重建。當涉及兩個不同的參與方時,您需要一個協議再次重建完全相同的對象。 Java序列化API只是爲您提供。您可以利用序列化功能的其他方法是,您可以使用它來執行深層複製。

現在的問題是您的網絡基礎設施和硬盤是硬件組件,它們理解位和字節而不是Java對象。序列化是將Java對象的值/狀態轉換爲字節以通過網絡發送或保存。 - >另一方面,反序列化是將字節碼轉換爲相應的java對象。

看到你不能只是傳遞一個Java對象到網絡的鏈路層,並期望它能夠發送。網絡通過物理介質發送位和字節。因此,可序列化可讓您以標準方式對對象進行二進制編碼,將其通過網絡傳遞,然後在接收端將其解碼爲對象處於發送端的確切狀態

+0

以展開這個字節碼是執行java程序的過程中的一步[如這裏所示](http://img.viralpatel。淨/ 2008/12/Java的程序execution.png)。正如sunrize所解釋的,序列化是在某些情況下由許多編程語言(它可能以不同的名稱)進行的過程,將對象轉換爲字節用於存儲/傳輸。序列化的一個常見用途是文件寫入。 – scottyseus