[發明專利]基于動態字節碼編譯技術的codejson框架在審
| 申請號: | 201510943030.0 | 申請日: | 2015-12-16 |
| 公開(公告)號: | CN105573758A | 公開(公告)日: | 2016-05-11 |
| 發明(設計)人: | 林斌 | 申請(專利權)人: | 福建星網智慧科技股份有限公司 |
| 主分類號: | G06F9/44 | 分類號: | G06F9/44 |
| 代理公司: | 福州市鼓樓區京華專利事務所(普通合伙) 35212 | 代理人: | 宋連梅 |
| 地址: | 361000 福建省廈門市*** | 國省代碼: | 福建;35 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 基于 動態 字節 編譯 技術 codejson 框架 | ||
技術領域
本發明涉及json解析序列化領域,尤其涉及一種基于動態字節碼編譯 技術的codejson框架。
背景技術
目前在Java中,比較常用的Json框架有Fastjson、Gson等,其中以 Fastjson的性能最強,可以解決將Javabean序列化為Json字符串,也可以將 Json字符串反序列化為Javabean。目前在Java的序列化領域,以Fastjson 為性能標桿,因為其具有優秀的序列化和反序列化性能。
但Fastjson框架主要的問題是性能仍然不夠強大,序列化能力距離理論 極限性能還有很大的差距;其次,對Json字符串反序列化支持不完善,部 分場景或者Javabean中包含簡單類型時就無法轉化。
發明內容
本發明要解決的技術問題,在于提供一種基于動態字節碼編譯技術的 codejson框架,是采用動態編譯字節碼的方式來完成Json框架的開發,建 立了一個Jfire-codejson框架,提高了序列化與反序列化的性能。
本發明是這樣實現的:
一種基于動態字節碼編譯技術的codejson框架,所述codejson框架用 于實現序列化方法與反序列方法;
所述序列化方法包括如下步驟:
步驟A1、獲取目標對象,在WriteContext中尋找該目標對象特定的序 列化器;
步驟A2、若WriteContext中存在所述特定的序列化器,則直接使用所 述特定的序列化器對該目標對象進行序列化后,結束流程;否則,通過動態 字節碼編譯技術生成一個新的輸出對象,并且該輸出對象具有一個指定好的 輸出接口;
步驟A3、往該輸出接口的方法體中添加字符緩存器,所述字符緩存器 是作為字符串插入的容器;
步驟A4、分析所述目標對象的信息,抽取出該目標對象中所有符合 Javabean規范的get方法,對每一所述get方法的返回值進行分析,該返回 值的類型包括基本類型、包裝類和String、實現Iterator接口類、實現Map 接口類、數組以及用戶自定義的類;
若該返回值屬于基本類型,則往所述方法體中寫入相應的代碼將該返回 值序列化為字符串,并存儲至所述字符緩存器;
若該返回值屬于包裝類和String,則往所述方法體中寫入相應的代碼將 該返回值序列化為字符串,并存儲至字符緩存器;
若該返回值屬于實現Iterator接口類,則往所述方法體中寫入相應的代 碼判斷該返回值是否為空,如果不為空,則再寫入相應的代碼遍歷Iterator 內容將該返回值序列化為字符串,并存儲至字符緩存器,如果為空,則不進 行操作;
若該返回值屬于實現Map接口類,則往所述方法體中寫入相應的代碼 判斷該返回值是否為空,如果該返回值不為空,則再寫入相應的代碼用于遍 歷Map內容,并判斷Map內容中每一對鍵值對的鍵是否為空,如果鍵為空, 則不進行操作,如果鍵不為空,則再寫入相應的代碼將該返回值序列化為字 符串,并存儲至字符緩存器,如果該返回值為空,則不進行操作;
若該返回值屬于數組,則往所述方法體中寫入相應的代碼判斷該返回值 是否為空,如果該返回值不為空,則再寫入相應的代碼用于遍歷當前維度數 組,如果當前數組維度大于或等于2,則判斷當前數組是否為空,如果當前 數組為空,則不進行操作,如果當前數組不為空,則繼續遍歷當前維度數組; 如果當前數組維度小于2,則寫入相應的代碼將該返回值序列化為字符串, 并存儲至字符緩存器,如果該返回值為空,則不進行操作;
若該返回值屬于用戶自定義的類,則往所述方法體中寫入相應的代碼判 斷該返回值是否為空,如果不為空,則再寫入相應的代碼將該返回值序列化 為字符串,并存儲至字符緩存器,如果為空,則不進行操作;
步驟A5、分析完畢后,將所述字符緩存器中的字符串組裝成特定的序 列化輸出類;
所述反序列化方法包括如下步驟:
步驟B1、創建兩個堆棧結構用來存儲數據,兩個堆棧分別為鍵堆棧和 值堆棧,所述鍵堆棧用來存儲json結構中的jsonkey,所述值堆棧用來存儲 json對象、jsonObject或jsonArray;
步驟B2、讀取index位置的字符,并進行分析;
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于福建星網智慧科技股份有限公司,未經福建星網智慧科技股份有限公司許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201510943030.0/2.html,轉載請聲明來源鉆瓜專利網。
- 上一篇:基于storm的物聯網數據處理系統及方法
- 下一篇:多系統切換的方法及裝置





