posts - 15,  comments - 8,  trackbacks - 0

          即使你沒有用過對象序列化(serialization),你可能也知道它。但你是否知道 Java 還支持另外一種形式的對象持久化,外部化(externalization)?

          下面是序列化和外部化在代碼級的關聯方式:

          public interface Serializable {}

          public interface Externalizable extends Serializable {
            void readExternal(ObjectInput in);
            void writeExternal(ObjectOutput out);
          }

          序列化和外部化的主要區別

          外部化和序列化是實現同一目標的兩種不同方法。下面讓我們分析一下序列化和外部化之間的主要區別。

          通過Serializable接口對對象序列化的支持是內建于核心 API 的,但是java.io.Externalizable的所有實現者必須提供讀取和寫出的實現。Java 已經具有了對序列化的內建支持,也就是說只要制作自己的類java.io.Serializable,Java 就會試圖存儲和重組你的對象。如果使用外部化,你就可以選擇完全由自己完成讀取和寫出的工作,Java 對外部化所提供的唯一支持是接口:

          voidreadExternal(ObjectInput in)
          void writeExternal(ObjectOutput out)

          現在如何實現readExternal() 和writeExternal() 就完全看你自己了。

          序列化會自動存儲必要的信息,用以反序列化被存儲的實例,而外部化則只保存被存儲的類的標識。當你通過 java.io.Serializable接口序列化一個對象時,有關類的信息,比如它的屬性和這些屬性的類型,都與實例數據一起被存儲起來。在選擇走 Externalizable這條路時,Java 只存儲有關每個被存儲類型的非常少的信息。

          每個接口的優點和缺點

          Serializable接口

          ·         優點:內建支持

          ·         優點:易于實現

          ·         缺點:占用空間過大

          ·         缺點:由于額外的開銷導致速度變比較慢

          Externalizable接口

          ·         優點:開銷較少(程序員決定存儲什么)

          ·         優點:可能的速度提升

          ·         缺點:虛擬機不提供任何幫助,也就是說所有的工作都落到了開發人員的肩上。

          在兩者之間如何選擇要根據應用程序的需求來定。Serializable通常是最簡單的解決方案,但是它可能會導致出現不可接受的性能問題或空間問題;在出現這些問題的情況下,Externalizable可能是一條可行之路。

          要記住一點,如果一個類是可外部化的(Externalizable),那么Externalizable方法將被用于序列化類的實例,即使這個類型提供了Serializable方法:

          private void writeObject()
          private void readObject()

          本文作者:David Petersheim是Genscape公司的應用程序開發部主任。他設計和開發用于獲取和處理實時能源數據的服務器端應用程序。


          posted on 2008-06-18 14:38 lvq810 閱讀(162) 評論(0)  編輯  收藏 所屬分類: Java
          主站蜘蛛池模板: 德化县| 新泰市| 秀山| 广汉市| 五指山市| 武城县| 丰原市| 凯里市| 德州市| 中卫市| 绍兴市| 耒阳市| 华蓥市| 吴川市| 四会市| 广元市| 民县| 罗田县| 平顶山市| 贵溪市| 夹江县| 牡丹江市| 浦江县| 太谷县| 察隅县| 吉木乃县| 姜堰市| 涿州市| 小金县| 鄂伦春自治旗| 都江堰市| 明溪县| 金平| 新余市| 武山县| 文成县| 汕尾市| 炉霍县| 商洛市| 大姚县| 花莲县|