Kryo框架使用方法代碼示例
Kryo框架的source已移至https://github.com/EsotericSoftware/kryo ,進(jìn)入此頁(yè)面,然后點(diǎn)擊右邊的Download Zip按鈕,就能下載到最新版本的Kryo框架。
導(dǎo)入Eclipse時(shí),記得JDK/JRE選用 JDK1.7版本,因?yàn)镵ryo會(huì)引用到unsafe()對(duì)象的一些方法JDK1.7才兼容。。
先來(lái)一個(gè)String類的序列化跟還原,是不是很簡(jiǎn)單?
</pre><pre name="code" class="java"> private static void testString () { Kryo kryo=new Kryo(); String w_str1="簡(jiǎn)體中文,繁體中文,English"; //把w_str1對(duì)象序列化 Output output=new Output(1024); kryo.writeObject(output, w_str1); output.flush(); output.close(); byte[] w_ret= output.toBytes(); //獲得byte數(shù)據(jù),這些數(shù)據(jù)可用作儲(chǔ)存、網(wǎng)絡(luò)傳輸?shù)?.. //還原 Input input=new Input(w_ret); input.close(); String w_str2=kryo.readObject(input, String.class); System.out.println(w_str2); }
再來(lái)一個(gè)HashMap類的序列化跟還原,因?yàn)镵ryo自帶了很多java基本類的Serializer,所以盡管不知道Serializer,Kryo也自動(dòng)匹配:
public static void testHashMap() throws NoSuchAlgorithmException{ Kryo kryo=new Kryo(); HashMap h=new HashMap(); h.put("k1", "v1"); h.put("k2", "v2"); Output output=new Output(1, 1024); kryo.writeObject(output, h); output.close(); byte[] data=output.toBytes(); Input i=new Input(data); i.close(); HashMap h2= (HashMap)kryo.readObject(i, HashMap.class); System.out.println(h2.get("k2")); }
那么,我自定義的Bean又應(yīng)該如何處理呢?下面給出例子:
1、先定義Bean TestBean:
public static class TestBean implements Serializable{ private int[] intArray; private HashMap<String,String> hashMapVal; private String strVal; public int[] getIntArray () { return intArray; } public void setIntArray (int[] intArray) { this.intArray = intArray; } public HashMap<String, String> getHashMapVal () { return hashMapVal; } public void setHashMapVal (HashMap<String, String> hashMapVal) { this.hashMapVal = hashMapVal; } public String getStrVal () { return strVal; } public void setStrVal (String strVal) { this.strVal = strVal; } }
2、因?yàn)檫@是自定義的Bean,Kryo在序列化前先要對(duì)TestBean進(jìn)行注冊(cè):kryo.register(TestBean.class,new BeanSerializer(kryo, TestBean.class)); ,具體例子如下:
public static void testBean() throws NoSuchAlgorithmException{ Kryo kryo=new Kryo(); kryo.register(TestBean.class,new BeanSerializer(kryo, TestBean.class)); TestBean tb1=new TestBean(); tb1.setStrVal("test1"); tb1.setHashMapVal(new HashMap<String,String>()); tb1.getHashMapVal().put("k1", "v1"); tb1.getHashMapVal().put("k2", "v2"); int[] ints=new int[3]; ints[0]=1; ints[1]=2; ints[2]=3; tb1.setIntArray(ints); Output output=new Output(1, 1024); kryo.writeObject(output, tb1); output.close(); byte[] data=output.toBytes();
Input i=new Input(data); i.close(); TestBean tb2= (TestBean)kryo.readObject(i, TestBean.class); System.out.println(tb2.strVal); System.out.println(tb2.hashMapVal.get("k1")); System.out.println(tb2.intArray[2]); }
總結(jié)
是不是非常簡(jiǎn)單?關(guān)于Kryo框架使用方法代碼示例的介紹就到這里,希望對(duì)大家有所幫助。有什么問(wèn)題可以隨時(shí)留言,小編會(huì)及時(shí)回復(fù)大家的。
相關(guān)文章
java string 轉(zhuǎn)date方法如何實(shí)現(xiàn)
在開(kāi)發(fā)應(yīng)用中經(jīng)常會(huì)使用到j(luò)ava string 轉(zhuǎn)date這種不是很常見(jiàn)的做法,本文將以此問(wèn)題提供詳細(xì)解決方案,需要了解的朋友可以參考下2012-11-11SpringBoot實(shí)現(xiàn)License生成和校驗(yàn)的過(guò)程詳解
在我們向客戶銷售商業(yè)軟件的時(shí)候,常常需要對(duì)所發(fā)布的軟件實(shí)行一系列管控措施,諸如驗(yàn)證使用者身份、軟件是否到期,以及保存版權(quán)信息和開(kāi)發(fā)商詳情等,所以本文給大家介紹了SpringBoot實(shí)現(xiàn)License生成和校驗(yàn)的過(guò)程,需要的朋友可以參考下2024-09-09淺談byte和長(zhǎng)度為8的boolean數(shù)組互相轉(zhuǎn)換
下面小編就為大家?guī)?lái)一篇淺談byte和長(zhǎng)度為8的boolean數(shù)組互相轉(zhuǎn)換。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-11-11SpringBoot整合TomCat實(shí)現(xiàn)本地圖片服務(wù)器代碼解析
這篇文章主要介紹了SpringBoot整合TomCat實(shí)現(xiàn)本地圖片服務(wù)器代碼解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08Struts 2 數(shù)據(jù)校驗(yàn)功能及校驗(yàn)問(wèn)題的解決方案
這篇文章主要介紹了Struts 2 數(shù)據(jù)校驗(yàn)功能及校驗(yàn)問(wèn)題的解決方案的相關(guān)資料,需要的朋友可以參考下2016-09-09