日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
使用JID來進行Java對象的高性能序列化

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

讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領域值得信任、有價值的長期合作伙伴,公司提供的服務項目有:主機域名、網(wǎng)站空間、營銷軟件、網(wǎng)站建設、蘇尼特左網(wǎng)站維護、網(wǎng)站推廣。

今天我試驗了下使用 JID 進行 Java 對象的序列化過程,現(xiàn)將這個過程與大家分享,至于在何種場景下使用大家自己發(fā)揮。

首先 JID 依賴于 JActor 和 SLF4J ,你下載的 JID 壓縮包中就包含這二者的 jar 文件。

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

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

 
 
 
  1. /** 
  2.  * 序列化對象 
  3.  * @author Winter Lau 
  4.  */ 
  5. public static class User extends AppJid { 
  6.     private StringJid getNameJid() throws Exception { 
  7.         return (StringJid) _iGet(0); 
  8.     } 
  9.      
  10.     private IntegerJid getAgeJid() throws Exception { 
  11.         return (IntegerJid) _iGet(1); 
  12.     } 
  13.      
  14.     public String getName() throws Exception { 
  15.         return getNameJid().getValue(); 
  16.     } 
  17.      
  18.     public void setName(String name) throws Exception { 
  19.         getNameJid().setValue(name); 
  20.     } 
  21.      
  22.     public int getAge() throws Exception { 
  23.         return getAgeJid().getValue(); 
  24.     } 
  25.      
  26.     public void setAge(int age) throws Exception { 
  27.         getAgeJid().setValue(age); 
  28.     } 

然后每個要做序列化的對象都需要有個對應的工廠類,這里是 UserFactory:

    
 
 
  1. public static class UserFactory extends AppJidFactory { 
  2.     final public static UserFactory fac = new UserFactory(); 
  3.  
  4.     public UserFactory() { 
  5.         super("User", JidFactories.STRING_JID_TYPE, JidFactories.INTEGER_JID_TYPE); 
  6.     } 
  7.  
  8.     protected User instantiateActor() throws Exception { 
  9.         return new User(); 
  10.     } 

  其中特別注意 UserFactory 構(gòu)造函數(shù)里的 "User" 這個參數(shù),下面需要用到。

接下來就是測試程序:

  
 
 
  1. public static void main(String[] args) throws Exception { 
  2.      
  3.     JAFactory factory = new JAFactory(){{(new JidFactories()).initialize(this);}}; 
  4.     factory.registerActorFactory(UserFactory.fac); 
  5.      
  6.     RootJid rootJid = (RootJid) factory.newActor(JidFactories.ROOT_JID_TYPE); 
  7.     long ct = System.currentTimeMillis(); 
  8.     rootJid.setValue("User"); 
  9.      
  10.     User user = (User)rootJid.getValue(); 
  11.     user.setName("Winter Lau"); 
  12.     user.setAge(98); 
  13.      
  14.     int slen = rootJid.getSerializedLength(); 
  15.      
  16.     byte[] sdatas = new byte[slen]; 
  17.     rootJid.save(sdatas, 0); 
  18.      
  19.     rootJid.load(sdatas, 0, slen); 
  20.     User user1 = (User)rootJid.getValue(); 
  21.      
  22.     System.out.printf("%dms->%s:%d\n", (System.currentTimeMillis()-ct), user1.getName(), user1.getAge()); 
  23.      

程序講解:

1. 首先需要構(gòu)造 JAFactory ,這是使用 JID 必須的一步(第3行)

2. 然后注冊我們需要進行序列化的類(第4行)

3. 構(gòu)造 RootJid,這也是必須的一步(第6行)

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

5. 對 User 對象實例進行值設置

6. 使用 rootJid.save 方法進行序列化,就是把對象轉(zhuǎn)稱 byte 數(shù)組

7. ***一步是演示從 byte 數(shù)據(jù)中加載對象并打印對象的屬性

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

這里需要很注意的是 UserFactory 中構(gòu)造函數(shù)的參數(shù)順序,***個參數(shù)是類型名稱,接下來的每個參數(shù)是對應每個屬性的類型,這個必須嚴格對應 User 類中的 _iGet(xx) 中 xx 的值。

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

完整的代碼以及列表的序列化請看:

https://github.com/oschina/cache-framework/tree/master/src/net/oschina/demo


當前文章:使用JID來進行Java對象的高性能序列化
文章地址:http://www.5511xx.com/article/djsgiih.html