最近我看到並聽到了一個新的概念(至少在我這裏)序列化。我看到的是,我們有一個Hibernate的DAO類來與DB交流,該類和所有實現序列化。我曾經要求開發人員說我們需要在傳輸對象時進行序列化。他在多線程環境中告訴我,我們需要實現接口或序列化。但我不相信他的陳述。序列化如何在多線程環境中有所幫助?
我們是後端應用程序,我們正在向前端提供web服務。所以我們有前端面對類,商業類和DAO類。在什麼地方使用這個序列化。
開發人員在多線程和序列化方面是否正確?
最近我看到並聽到了一個新的概念(至少在我這裏)序列化。我看到的是,我們有一個Hibernate的DAO類來與DB交流,該類和所有實現序列化。我曾經要求開發人員說我們需要在傳輸對象時進行序列化。他在多線程環境中告訴我,我們需要實現接口或序列化。但我不相信他的陳述。序列化如何在多線程環境中有所幫助?
我們是後端應用程序,我們正在向前端提供web服務。所以我們有前端面對類,商業類和DAO類。在什麼地方使用這個序列化。
開發人員在多線程和序列化方面是否正確?
我不知道他講多線程和序列化的意思。這是兩個不同的概念。你的問題是什麼 ?
http://docs.oracle.com/javase/tutorial/jndi/objects/serial.html
序列化被簡單地用於保存/恢復對象的狀態到它通過線路傳送或保存/從盤等,這是在使用RMI(遠程過程調用)例如恢復。
您必須實施Serializable
爲了將您的對象轉換爲bitStream,無論你做什麼。
只有一件事,你必須在多線程環境中考慮,ObjectStream
在寫入對象時沒有鎖定。所以如果你的對象狀態會被多個線程同時修改。鎖定和寫入安全是應用責任。
這個SO提供了更多關於這方面的信息。
"He told me in a multithreaded environment, either we need to implement interface or serialization"
你的意思是實施interface
?任何界面?或proxies
?
對於DAO層。按照JPA規範
If an entity instance is to be passed by value as a detached object (e.g., through a remote interface), the
entity class must implement the Serializable interface
所以JPA不,除非你想序列外力你做Serializable
(如在遠程發送對象/寫入文件等)。但它是沒有什麼害處實施Serializable
,因爲它只是標記接口。恕我直言,它始終是在實體類來實現好的做法
序列化使用你需要一個對象,並將其轉換爲一個序列形式的任何時間,因此它可以存儲供以後使用(如保存文檔),或在不同的JVM上傳輸和使用。
串行化通常只在分佈式計算環境中使用時纔會影響併發性,在分佈式計算環境中,不同的JVM實例可能在解決同一問題並需要交換信息。
這些都不是你需要擔心很長很長時間的事情。