回答
序列化僅適用於實現Serializable
的類(請閱讀此界面的文檔)。我不認爲你可以在運行時切換它。如果您不希望對象可序列化,請不要使它們實現Serializable
。
如果序列號在您的控制範圍內(即您撥打ObjectOutputStream.writeObject(..)
),則只需設置一個禁止該呼叫的配置選項。
另一種選擇是根據配置選項實施writeObject(ObjectOutputStream out)
方法並拋出異常。
如果添加引發異常的writeObject
的實現,則序列化將被中止,例如,
private void writeObject(ObjectOutputStream stream) throws IOException {
throw new RuntimeException("Don't want to serialize today");
}
一個很好的介紹,以覆蓋缺省序列化行爲見http://java.sun.com/developer/technicalArticles/ALT/serialization/。
我建議拋出一個更具體的'UnsupportedOperationException'而不是一般的'RuntimeException'。 – 2010-05-09 19:18:34
從需要在序列化和反序列化過程中的特殊處理必須實現具有下列準確簽名的特殊方法http://java.sun.com/j2se/1.4.2/docs/api/java/io/Serializable.html
類:
private void writeObject(java.io.ObjectOutputStream out) throws IOException
private void readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException;
你總是可以嘗試超載writeObject
與上面的簽名,並拋出異常。
謝謝你的回答,現在我想我明白它是如何工作的。 – PaulP89 2010-05-09 14:22:52
您要提供的三種自定義序列化方法是writeObject
,readObject
和readObjectNoData
。適當的例外是適當命名的java.io.NotSerializableException
。
private void writeObject(
ObjectOutputStream out {
) throws IOException {
throw new NotSerializableException();
}
private void readObject(
ObjectInputStream in
) throws IOException, ClassNotFoundException {
throw new NotSerializableException();
}
private void readObjectNoData(
) throws ObjectStreamException {
throw new NotSerializableException();
}
甲小動作(雖然在spec實際上不指定)是引起NPE當系統試圖創建匹配java.io.ObjectStreamClass
。我 s。
private static final ObjectStreamField[] serialPersistentFields = { null }
- 1. 鎖定序列化
- 2. 如何鎖定初始化程序列表中的互斥鎖?
- 3. 如何在java中序列化/反序列化對象列表?
- 4. 如何在Java中序列化在Java中反序列化用戶定義的Java對象?
- 5. 如何在java中序列化Jdbc4SQLXML類
- 6. 如何在java中實現序列化
- 7. 在java中定製序列化過程
- 8. 爲什麼鎖在java中是可序列化的?
- 9. 如何在Java中鎖定框架(GUI)
- 10. 如何序列化/反序列化Java中的引用?
- 11. 如何序列化Java中的不可序列化?
- 12. 在java中序列化BigInteger
- 13. 鎖定在Java EE應用程序中
- 14. Java程序,程序鎖定
- 15. 自定義Java序列化
- 16. 如何序列化Java中的AttributedString?
- 17. 在Java序列化
- 18. 如何在Java/C應用程序中實現鎖定
- 19. 如何在java中鎖定和解鎖網址
- 20. 在MTA中簡化鎖定
- 21. 如何在Java中以JSON和XML格式序列化/反序列化?
- 22. java序列化 - 持久化類定義
- 23. 在java中序列化數組列表
- 24. 在java中偏向鎖定
- 25. 在Java中寫鎖定
- 26. java - 在自定義反序列化中調用標準反序列化
- 27. 序列化 - 如何保護序列化的JAVA對象?
- 28. java小程序域鎖定
- 29. 如何序列化和反序列化Java中的對象列表?
- 30. Java序列化
僅適用於一個類,或者您嘗試序列化的* any *類? – 2010-05-09 14:18:31
僅供一堂課。 – PaulP89 2010-05-09 14:24:08