熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

使用JID來進行Java對象的高性能序列化

2013-11-23 18:49:55  來源: Java核心技術 

  JID 是一個用來反序列化更新和重新序列化 Map 對象在 i GHz 處理器的機器上完成 條目的操作僅需 毫秒序列化和重新序列化的時間很大程度上依賴於表條目的大小和復雜度增量式的序列化和反序列化用於達到高性能

  今天我試驗了下使用 JID 進行 Java 對象的序列化過程現將這個過程與大家分享至於在何種場景下使用大家自己發揮

  首先 JID 依賴於 JActor 和 SLFJ 你下載的 JID 壓縮包中就包含這二者的 jar 文件

  大家先不需要關心代碼中牽扯的一些類是作何用途的先把例子跑起來!

  我們這裡假設要對一個 User 對象進行序列化User 對象如下

  /**

  * 序列化對象

  * @author Winter Lau

  */

  public static class User extends AppJid {

  private StringJid getNameJid() throws Exception {

  return (StringJid) _iGet();

  }

  private IntegerJid getAgeJid() throws Exception {

  return (IntegerJid) _iGet();

  }

  public String getName() throws Exception {

  return getNameJid()getValue();

  }

  public void setName(String name) throws Exception {

  getNameJid()setValue(name);

  }

  public int getAge() throws Exception {

  return getAgeJid()getValue();

  }

  public void setAge(int age) throws Exception {

  getAgeJid()setValue(age);

  }

  }

  然後每個要做序列化的對象都需要有個對應的工廠類這裡是 UserFactory

  public static class UserFactory extends AppJidFactory {

  final public static UserFactory fac = new UserFactory();

  public UserFactory() {

  super(User JidFactoriesSTRING_JID_TYPE JidFactoriesINTEGER_JID_TYPE);

  }

  protected User instantiateActor() throws Exception {

  return new User();

  }

  }

  其中特別注意 UserFactory 構造函數裡的 User 這個參數下面需要用到

  接下來就是測試程序

  public static void main(String[] args) throws Exception {

  JAFactory factory = new JAFactory(){{(new JidFactories())initialize(this);}};

  factoryregisterActorFactory(UserFactoryfac);

  RootJid rootJid = (RootJid) factorynewActor(JidFactoriesROOT_JID_TYPE);

  long ct = SystemcurrentTimeMillis();

  rootJidsetValue(User);

  User user = (User)rootJidgetValue();

  usersetName(Winter Lau);

  usersetAge();

  int slen = rootJidgetSerializedLength();

  byte[] sdatas = new byte[slen];

  rootJidsave(sdatas );

  rootJidload(sdatas slen);

  User user = (User)rootJidgetValue();

  Systemoutprintf(%dms>%s:%d\n (SystemcurrentTimeMillis()ct) usergetName() usergetAge());

  }

  程序講解

  首先需要構造 JAFactory 這是使用 JID 必須的一步(第行)

  然後注冊我們需要進行序列化的類(第行)

  構造 RootJid這也是必須的一步(第行)

  rootJidsetValue(User) 這是設置要進行序列化的對象類型這個 User 就是我們在 UserFactory 定義的字符串

  對 User 對象實例進行值設置

  使用 rootJidsave 方法進行序列化就是把對象轉稱 byte 數組

  最後一步是演示從 byte 數據中加載對象並打印對象的屬性

  這便是一個完整的使用 JID 進行自定義對象的序列化和反序列化的過程如果你是使用 Java 原生的一些數據類型就不需要自行創建類對象

  這裡需要很注意的是 UserFactory 中構造函數的參數順序第一個參數是類型名稱接下來的每個參數是對應每個屬性的類型這個必須嚴格對應 User 類中的 _iGet(xx) 中 xx 的值

  據說 JID 的序列化的性能是極高的這方面我還沒進行測試需要注意的是這個序列化的結果和 Java 本身的序列化是不兼容的


From:http://tw.wingwit.com/Article/program/Java/hx/201311/25813.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.