成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

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

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

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

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

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

我們這里假設要對一個 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 構造函數里的 "User" 這個參數,下面需要用到。

接下來就是測試程序:

  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. 首先需要構造 JAFactory ,這是使用 JID 必須的一步(第3行)
2. 然后注冊我們需要進行序列化的類(第4行)
3. 構造 RootJid,這也是必須的一步(第6行)
4. rootJid.setValue("User") 這是設置要進行序列化的對象類型,這個 "User" 就是我們在 UserFactory 定義的字符串
5. 對 User 對象實例進行值設置
6. 使用 rootJid.save 方法進行序列化,就是把對象轉稱 byte 數組
7. ***一步是演示從 byte 數據中加載對象并打印對象的屬性

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

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

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

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

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

原文鏈接:http://www.oschina.net/question/12_91132

責任編輯:林師授 來源: OSChina
相關推薦

2013-02-27 09:58:32

JavaJID

2009-03-10 13:38:01

Java序列化字節流

2018-03-19 10:20:23

Java序列化反序列化

2024-09-25 16:10:05

2011-06-01 15:05:02

序列化反序列化

2009-06-14 22:01:27

Java對象序列化反序列化

2025-07-04 09:19:54

2012-04-13 10:45:59

XML

2009-09-09 15:47:27

XML序列化和反序列化

2009-09-09 14:45:41

XML序列化和反序列化

2010-05-14 10:55:04

java對象序列化

2012-02-14 10:29:02

Java

2021-08-30 12:25:12

Python序列化函數

2022-08-06 08:41:18

序列化反序列化Hessian

2016-12-05 18:32:08

序列化androidjava

2022-12-08 10:28:44

JavaQueue排序

2013-03-11 13:55:03

JavaJSON

2010-03-19 15:54:21

Java Socket

2009-02-24 10:09:02

XMLJava對象

2010-01-08 11:11:38

JSON 序列化
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 新超碰97 | 亚洲视频一区二区三区 | 国产精品久久久亚洲 | www.中文字幕.com | 在线看亚洲 | 亚洲视频免费在线观看 | 精品视频一区二区三区在线观看 | 精品视频一区二区三区在线观看 | 欧美久久久电影 | 国产丝袜一区二区三区免费视频 | 久久婷婷国产 | 国产精久久久久久久妇剪断 | 亚洲欧洲中文日韩 | 国产在线拍偷自揄拍视频 | av黄色在线观看 | 欧美成人一区二区三区片免费 | 国产午夜精品久久久久免费视高清 | 成人一区av偷拍 | 中文字幕日韩一区二区 | 日本在线黄色 | 青青久久 | 狠狠操婷婷 | 99re6在线| 97国产精品视频人人做人人爱 | 一级全黄少妇性色生活免费看 | 国产视频一区在线 | 免费观看一级黄色录像 | 免费爱爱视频 | 精精国产xxxx视频在线播放 | 精品一区二区在线视频 | 第一区在线观看免费国语入口 | 亚洲精品久久嫩草网站秘色 | 91亚洲精选| 亚洲一区久久 | 亚洲精品一区国语对白 | 国产一区二区三区免费视频 | 中文av电影| 久久综合影院 | 91精品国产91久久综合桃花 | 天天舔天天 | 欧美精品v|