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

使用 JID 來(lái)進(jìn)行Java對(duì)象的高性能序列化

開(kāi)發(fā) 后端
今天我試驗(yàn)了下使用 JID 進(jìn)行 Java 對(duì)象的序列化過(guò)程,現(xiàn)將這個(gè)過(guò)程與大家分享,至于在何種場(chǎng)景下使用大家自己發(fā)揮。首先 JID 依賴于 JActor 和 SLF4J ,你下載的 JID 壓縮包中就包含這二者的 jar 文件。

JID 是一個(gè)用來(lái)反序列化、更新和重新序列化 Map 對(duì)象,在 i5 2.53GHz 處理器的機(jī)器上,完成 10000 條目的操作僅需 4 毫秒。序列化和重新序列化的時(shí)間很大程度上依賴于表?xiàng)l目的大小和復(fù)雜度,增量式的序列化和反序列化用于達(dá)到高性能。

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

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

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

我們這里假設(shè)要對(duì)一個(gè) User 對(duì)象進(jìn)行序列化,User 對(duì)象如下:

  1. /** 
  2.  * 序列化對(duì)象 
  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.     } 

然后每個(gè)要做序列化的對(duì)象都需要有個(gè)對(duì)應(yīng)的工廠類,這里是 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" 這個(gè)參數(shù),下面需要用到。

接下來(lái)就是測(cè)試程序:

  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. 然后注冊(cè)我們需要進(jìn)行序列化的類(第4行)

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

4. rootJid.setValue("User") 這是設(shè)置要進(jìn)行序列化的對(duì)象類型,這個(gè) "User" 就是我們?cè)?UserFactory 定義的字符串

5. 對(duì) User 對(duì)象實(shí)例進(jìn)行值設(shè)置

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

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

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

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

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

完整的代碼以及列表的序列化請(qǐng)看:

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

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

 
責(zé)任編輯:張偉 來(lái)源: oschina
相關(guān)推薦

2013-02-28 10:00:43

JIDJava序列化

2009-03-10 13:38:01

Java序列化字節(jié)流

2018-03-19 10:20:23

Java序列化反序列化

2024-09-25 16:10:05

2009-06-14 22:01:27

Java對(duì)象序列化反序列化

2011-06-01 15:05:02

序列化反序列化

2025-07-04 09:19:54

2012-04-13 10:45:59

XML

2010-05-14 10:55:04

java對(duì)象序列化

2009-09-09 14:45:41

XML序列化和反序列化

2009-09-09 15:47:27

XML序列化和反序列化

2012-02-14 10:29:02

Java

2021-08-30 12:25:12

Python序列化函數(shù)

2022-08-06 08:41:18

序列化反序列化Hessian

2016-12-05 18:32:08

序列化androidjava

2013-03-11 13:55:03

JavaJSON

2022-12-08 10:28:44

JavaQueue排序

2010-03-19 15:54:21

Java Socket

2009-02-24 10:09:02

XMLJava對(duì)象

2009-08-25 15:15:08

C#對(duì)象序列化應(yīng)用
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 91精品国产91久久综合桃花 | 一区在线视频 | 国产精品视频一区二区三区四蜜臂 | 国产一二区视频 | 久操伊人 | 欧美日一区| 国产欧美精品一区二区三区 | 精品免费视频一区二区 | 国产91久久精品一区二区 | 在线播放国产一区二区三区 | 欧美一级片在线观看 | 久久久91精品国产一区二区精品 | 日韩三级在线观看 | 久久久国产一区二区三区 | 亚洲免费在线 | 久久国内精品 | 91在线一区二区三区 | 99re在线视频 | 欧州一区二区 | 亚洲一区欧美 | 看一级黄色毛片 | 一区二区三区四区五区在线视频 | 日韩一区二区三区在线 | 中文字幕高清在线 | 最新毛片网站 | 国产小网站 | 欧美九九 | 一级无毛片 | 国产99精品 | 亚洲性视频网站 | 欧美视频在线播放 | 蜜月aⅴ免费一区二区三区 99re在线视频 | 国产精品视频二区三区 | 国产精品久久久久久久久久免费看 | 久久免费视频1 | 午夜久久久久久久久久一区二区 | 日韩中文一区 | 一区二区三区日韩精品 | 能看的av网站 | 日韩欧美精品一区 | av中文字幕在线 |