![](/img/trans.png)
[英]Jackson java.util.Date value in Map<String, Object> (de-)serialization
[英]Is Java (de-)serialization atomic?
對於此問題,假定當對象被完全寫入流並成功讀出時,或者當對象被部分寫入流並且當讀回對象時發生異常時,序列化/反序列化是原子的。 假設例如由於斷電,寫入操作可能無法成功完成。
在Serializable
類的描述中,我讀到:
如果序列化流已被篡改,也可能會發生這種情況。 因此,盡管源流“敵對”或不完整,但
readObjectNoData
對於正確初始化反序列化的對象很有用。
這可能暗示着從ObjectInputStream
讀取對象不是原子的事實。 這是否意味着從流中讀取Java對象可能不是原子操作?
如果將部分對象寫入持久性存儲器然后進行檢索,我是否確定會引發異常?
如果Java序列化不是原子的,那么是否存在將對象作為原子操作(反序列化)到持久性內存的最佳實踐?
筆記:
ObjectInputStream
和FileInputStream
; 這可能暗示着從ObjectInputStream讀取對象不是原子的事實。 這是否意味着從流中讀取Java對象可能不是原子操作?
在您所指的意義上,我在任何地方都不知道有任何陳述是原子的,但我也看不出它與您引用的摘錄有什么關系。 讀取一個對象涉及許多讀取操作:標記,類名和所有字段,因此,按照您的意思,整個操作不可能是原子的。
如果將部分對象寫入持久性存儲器然后進行檢索,我是否確定會引發異常?
我看不出您如何避免遇到例外。
如果Java序列化不是原子的,那么是否存在將對象序列化為原子操作的持久化內存的最佳實踐?
您無法確定它是否會發生,但是您可以捕獲未引發的異常。 調用flush()
,如果失敗,則序列化不完整。
原子的意思是,例如,寫磁盤時斷電期間會發生什么
將對象寫入磁盤也不是原子的。 它們由幾個邏輯寫入組成。 如果您的程序由於斷電而停止運行,甚至沒有得到IOException
,那么您所擁有的只是一個短文件,在讀取時會導致異常。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.