『壹』 java 反序列化報錯 提示:java.io.StreamCorruptedException 異常
感覺是你while語句那塊的問題,while(ois.readObject() != null)這條語句表明從對象流中讀取一個對象,此時對象流已經從文件中讀取了位元組序列並且創建了一個對象的實例。而你又在while語句中再次調用ois.readObject(),對象流會再次讀取文件中的位元組序列去反序列化對象,如果文件已經到了EOF,就會出現問題。感覺ObjectInputStream還是別用在while循環中
『貳』 java不能運行,這是提示的什麼錯誤
這是因為你的Java類缺少了一個序列號(serialVersionUID)。序列號對於Java對象的序列化和反序列化非常重要。如果你的類參與了序列化操作,而沒有提供序列號,那麼在序列化或反序列化過程中,就會遇到問題。這通常會導致運行時異常。
如果你使用的是Eclipse這樣的集成開發環境(IDE),在你的類名下面可能會看到一個黃色的警告提示。這表示Eclipse檢測到了你的類缺少序列號。你可以通過點擊這個黃色提示來解決這個問題。
當你點擊黃色提示時,Eclipse會自動為你生成一個序列號。這個序列號是一個long類型的值,通常建議使用工具或框架來生成,以確保序列號的唯一性和穩定性。生成後,你可以在類的聲明部分手動添加這個序列號,如下所示:
java
public class MyClass implements Serializable {
private static final long serialVersionUID = 1L;
}
通過這種方式,你可以避免序列化和反序列化過程中可能出現的問題。確保序列號的存在和正確性,可以幫助你更好地管理對象的狀態。
如果你在項目中使用了多個類進行序列化,確保每個類都有一個序列號,並且這些序列號是唯一的,可以避免在序列化和反序列化過程中出現兼容性問題。
總之,給Java類添加序列號是一個良好的編程習慣,特別是在涉及對象的序列化操作時。Eclipse等IDE工具可以幫你自動完成這個步驟,簡化了開發過程。
『叄』 java序列化不同JVM版本問題,怎麼解決
簡單來說,Java的序列化機制是通過在運行時判斷類的serialVersionUID來驗證版本一致性的。在進行反序列化時,JVM會把傳來的位元組流中的serialVersionUID與本地相應實體(類)的serialVersionUID進行比較,如果相同就認為是一致的,可以進行反序列化,否則就會出現序列化版本不一致的異常。
當實現java.io.Serializable介面的實體(類)沒有顯式地定義一個名為serialVersionUID,類型為long的變數時,Java序列化機制會根據編譯的class自動生成一個serialVersionUID作序列化版本比較用,這種情況下,只有同一次編譯生成的class才會生成相同的serialVersionUID 。
如果我們不希望通過編譯來強制劃分軟體版本,即實現序列化介面的實體能夠兼容先前版本,未作更改的類,就需要顯式地定義一個名為serialVersionUID,類型為long的變數,不修改這個變數值的序列化實體都可以相互進行串列化和反串列化。
serialVersionUID主要來判斷不同版本的兼容性。
當在反序列化的時候,位元組流中的版本號,就和serialVersionUID區比較,而生成它的對象。
如果你沒有設置,java序列化機制,也自動會給你分配一個。
其實這個東西沒必要去考慮!中軟卓越APP,你了解的更多