按照序列化定義,它是將數據結構或對象狀態轉換爲可以存儲的格式(例如,在文件或內存緩衝區中,或通過網絡連接鏈接傳輸)的過程以及稍後在相同或另一個計算機環境中重建。是否需要Java序列化
除了通過網絡傳輸對象之外,所有東西都是清晰的。序列化是java對象通過netowrk傳輸的唯一方法嗎?
在web應用程序中,有許多POJO類沒有實現可序列化的接口,但我們仍然可以從客戶端訪問這些類的對象。應用程序服務器或JVM是否處理這些類的序列化?
按照序列化定義,它是將數據結構或對象狀態轉換爲可以存儲的格式(例如,在文件或內存緩衝區中,或通過網絡連接鏈接傳輸)的過程以及稍後在相同或另一個計算機環境中重建。是否需要Java序列化
除了通過網絡傳輸對象之外,所有東西都是清晰的。序列化是java對象通過netowrk傳輸的唯一方法嗎?
在web應用程序中,有許多POJO類沒有實現可序列化的接口,但我們仍然可以從客戶端訪問這些類的對象。應用程序服務器或JVM是否處理這些類的序列化?
你的類並不需要實現Serializable
以便通過網絡傳輸它們,因爲有很多不同形式的序列化,而java的內置實際上並不是那麼棒。爲什麼?因爲接收端必須也是java應用程序,它必須具有您正在傳輸的類的兼容版本。
通過網絡傳輸數據的更便攜和靈活的方式是將它們轉換爲XML/JSON,無論是Java,C++,python還是其他任何系統(可以在任何系統上使用)可能已經猜到了 - 對象不需要實現Serializable
以便(從)到/到XML,Json等編組)。
另外還有很多其他的序列化框架比Java的內置序列化機制更好地完成這個任務。一個例子是:Google的Protobuff,Apache Thrift,Avro,Kryo等等。
在web應用程序的上下文中有許多POJO類沒有實現可序列化的接口,但我們仍然可以從客戶端訪問這些類的對象。應用程序服務器或JVM是否處理這些類的序列化?
不,這是由應用程序或您正在使用的框架處理。例如,Jax-RS實現會使用一些庫,如Jakson
來將對象封送到幕後的Xml/Json中。
Serializable
是存儲在會話中的對象所必需的,如果您想要使用持久性(倖存的應用程序服務器重新啓動)和/或共享(跨多個應用程序服務器)會話。
數據傳輸到客戶端通常不是通過Java序列化(JSON/XML)完成的,正如其他人已經解釋的那樣。
您需要將序列化區分爲使對象字節可傳輸的概念和Java序列化作爲特定實現。將一個對象轉換爲XML,字符串或JSON也使它可以轉換,但不使用Java序列化。 – eckes 2015-02-07 17:55:16