专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

关于如何使用Kryo完成序列化和反序列化

  基于kryo完成序列化和反序列化1。Kryo的使用
  Step01:定义mail类:packagecom。java。serializable;importjava。io。Serializable;importjava。util。Date;publicclassMailimplementsSerializable{privatestaticfinallongserialVersionUID6599166688654530165L;privateIntegerid;privateStringtitle;privateStringcontent;privateDatecreatedTime;publicIntegergetId(){returnid;}publicvoidsetId(Integerid){this。idid;}publicStringgetTitle(){returntitle;}publicvoidsetTitle(Stringtitle){this。titletitle;}publicStringgetContent(){returncontent;}publicvoidsetContent(Stringcontent){this。contentcontent;}publicDategetCreatedTime(){returncreatedTime;}publicvoidsetCreatedTime(DatecreatedTime){this。createdTimecreatedTime;}OverridepublicStringtoString(){returnMail〔idid,titletitle,contentcontent,createdTimecreatedTime〕;}}
  Step02:添加依赖dependencygroupIdcom。esotericsoftwaregroupIdkryoartifactIdversion5。0。0RC4versiondependency
  Step03:编写测试类packagecom。java。serializable;importjava。util。Date;importorg。apache。tomcat。util。http。fileupload。ByteArrayOutputStream;importcom。esotericsoftware。kryo。Kryo;importcom。esotericsoftware。kryo。io。Input;importcom。esotericsoftware。kryo。io。Output;publicclassTestSerializable06{publicstaticvoidmain(String〔〕args){MailmnewMail();m。setId(100);m。setTitle(test);m。setContent(thisistestcontent);m。setCreatedTime(newDate());基于Kryo框架将对象序列化KryokryonewKryo();将默认类的自动注册功能关闭(默认会将类全名序列化)kryo。setRegistrationRequired(false);kryo。register(Mail。class);kryo。register(Date。class);ByteArrayOutputStreambos内置可扩容数组newByteArrayOutputStream();OutputoutputnewOutput(bos);kryo。writeObject(output,m);写入null时会报错output。close();System。out。println(序列化ok);基于Kryo框架将对象反序列化byte〔〕databos。toByteArray();InputinputnewInput(data);Mailm2kryo。readObject(input,Mail。class);读出null时会报错input。close();System。out。println(m2);}}
  结果:序列化okMail〔id100,titletest,contentthisistestcontent,createdTimeMonNov1114:15:35CST2019〕2。工具类
  可将如上序列化方法进行封装,写到序列化工具类中,例如:publicclassKryoSerializer{privatestaticfinalThreadLocalKryokryoLocalThreadLocal。withInitial((){KryokryonewKryo();kryo。setReferences(true);检测循环依赖,默认值为true,避免版本变化显式设置kryo。setRegistrationRequired(false);默认值为true,避免版本变化显式设置((DefaultInstantiatorStrategy)kryo。getInstantiatorStrategy())。setFallbackInstantiatorStrategy(newStdInstantiatorStrategy());设定默认的实例化器returnkryo;});publicbyte〔〕serialize(Objectobj){KryokryogetKryo();ByteArrayOutputStreambyteArrayOutputStreamnewByteArrayOutputStream();OutputoutputnewOutput(byteArrayOutputStream);kryo。writeClassAndObject(output,obj);output。close();returnbyteArrayOutputStream。toByteArray();}publicTTdeserialize(byte〔〕bytes){KryokryogetKryo();InputinputnewInput(newByteArrayInputStream(bytes));return(T)kryo。readClassAndObject(input);}privateKryogetKryo(){returnkryoLocal。get();}}
  编写测试类:packagecom。java。serializable;importjava。io。IOException;importjava。util。Date;publicclassTestSerializable07{publicstaticvoidmain(String〔〕args)throwsIOException{MailmnewMail();m。setId(100);m。setTitle(test);m。setContent(thisistestcontent);m。setCreatedTime(newDate());基于Kryo框架将对象序列化byte〔〕arrayKryoSerializer。serializable(m);System。out。println(序列化OK,array。lengtharray。length);基于Kryo框架将对象反序列化Mailm2KryoSerializer。deserialization(array,Mail。class);System。out。println(m2);}}
  运行结果:序列化OK,array。length49Mail〔id100,titletest,contentthisistestcontent,createdTimeMonNov1118:04:03CST2019〕3。两种读写方式
  根据是否写入class类型分为两种方式,这里特别指出这里的的class指的是读写对象的class,如果读写的是有嵌套类型对象,则不管采用哪种方式,子类型class都会序列化。3。1只写实例信息知道class且对象不为nullkryo。writeObject(output,someObject);。。。SomeClasssomeObjectkryo。readObject(input,SomeClass。class);知道class且对象可能为nullkryo。writeObjectOrNull(output,someObject);。。。SomeClasssomeObjectkryo。readObjectOrNull(input,SomeClass。class);3。2同时写入class类型和实例信息(RPC场景)
  class未知且对象可能为null,但这种场景,会多占用空间。这种方式是我们在RPC中应当使用的方式kryo。writeClassAndObject(output,object);。。。Objectobjectkryo。readClassAndObject(input);if(objectinstanceofSomeClass){。。。}4。相关配置
  register类注册
  kryo支持通过类注册,注册会给每一个class一个int类型的Id相关联,这显然比类名称高效,但同时要求反序列化的时候的Id必须与序列化过程中一致。这意味着注册的顺序非常重要。kryo。register(SomeClassA。class);kryo。register(SomeClassB。class);
  但是由于现实原因,同样的代码,同样的Class在不同的机器上注册编号任然不能保证一致,所以多机器部署时候反序列化可能会出现问题。
  所以kryo默认会开启类注册(version:5。0。2),可以通过kryo。setRegistrationRequired(false)关闭,关闭后Kryo会根据类型去loadClass关联kryo。setRegistrationRequired(false);一般设置为false解决线程不安全
  由于Kryo线程不安全,意味着每次序列化和反序列化时都需要实例化一次,或借助ThreadLocal来维护以保证其线程安全。privatestaticfinalThreadLocalKryokryosnewThreadLocalKryo(){protectedKryoinitialValue(){KryokryonewKryo();configurekryoinstance,customizesettingsreturnkryo;};};Somewhereelse,useKryoKryokkryos。get();。。。
  或者使用kryo提供的pool:publicKryoPoolnewKryoPool(){returnnewKryoPool。Builder((){finalKryokryonewKryo();kryo。setInstantiatorStrategy(newKryo。DefaultInstantiatorStrategy(newStdInstantiatorStrategy()));returnkryo;})。softReferences()。build();}

李东华被国家队劝退后,入籍瑞士获得奥运冠军,为何获得国人赞扬如果您喜欢这篇作品,欢迎点击右上方关注。感谢您的鼓励与支持,希望能给您带来舒适的阅读体验。有这么一个人,他曾离开自己的祖国为其他国家争取荣誉,也曾因为爱情放弃了自己的面包。从某种意郭广昌,广州业主,福建豪门大家都没法装下去了局长想从最近的三条新闻中,试图找出一个共同点。郭广昌9月13日,在国外游玩3个月的郭老,豪情壮志告诉大家一个好消息喝舍得酒,没跑路,放心吧。别听怎么说,要看怎么做,郭老壮士断腕起来打脸姚明,爆CBA集体投诉上海男篮违规尴尬了,中国篮协和姚明被狠狠的打脸啊!国内媒体称,CBA多队集体投诉上海男篮公然违规签约球员,从而导致联赛不公平,要求主管部门对劣迹球员比斯利事件给出合理说明!本赛季上海男篮可谓是热管理赛道机会个股机会分析热管理赛道机会梳理为什么要重视新能源汽车热管理?消费端,新能源车给用户带来的安全性经济性和舒适性体验已逐渐胜过传统燃油车。政策方面,无论国内还是欧美各国,均将新能源汽车产业纳入长期12惜败!中超倒数第1又输了被36岁阎相闯打爆,吞下11连败北京时间9月20日1930,中超第16轮补赛,36岁阎相闯传射建功,新援特索涅夫3场3球,高华泽破门难救主,最终大连人21击败河北队。大连人上一场刚在主场51大胜深圳队,如今他们又听闻单刀不进才知武磊回归!但西甲边缘人也能从容浪射吊打中超单刀不进成了武磊的铭牌,在中超赛场上听到这个消息,上海以外的球迷们才知道武磊回来了。9月20日在中超上港对河南的比赛中,武磊在时隔1409天后回归国内联赛。武磊赛后表示自己的比赛感有史以来最爱的手机三星ZFlip4如果是你,zflip4和zfold4怎么选,说实话这两款手机我都很喜欢,我的建议是,如果你想体验折叠屏的功能和享受大屏,建议zfold4,绝对是当今最好用最强的大折叠。如果是想与众不要买折叠屏手机小米MIXfold使用者报告点击查看完整视频如果你是打算买折叠手机的朋友,那么请你认真看完这个影片,再冷静地想想,你是否真的需要折叠手机,如果你看完还是坚定的想买折叠屏手机的话,那就,请你再看一遍,当然如果你上手掠夺者战斧3002022版岂止12代酷睿,全面强劲面对高度成熟的笔电市场,厂商们对产品进行精细化的运作。诸如针对时尚商务精英,推出主打轻薄高颜的轻薄本针对游戏发烧友,推出主打性能散热的游戏本等等。时移势易,硬件性能的提升和消费生产如果苹果真的盛极而衰,我们又有什么拿出手的创新呢?今天,苹果又一次被骂上热搜!继罗永浩后,网红经济学家任泽平炮轰iPhone14,声称是苹果盛极而衰的标志。苹果真的没有创新了吗?我们又有什么拿出手的创新呢?工信部今日重磅发布会,信王者荣耀肉肉张亮,刺客不能砍他,大招称霸峡谷张亮是法师,拥有两个控制技能,自身的伤害也很高。根据玩法定位的不同,张亮有三种玩法,分别是法式或行走的半肉中文的纯输出全肉行走。在这篇文章中,咩哥就给大家详细介绍一下张亮的肉香四溢
中国居民平衡膳食宝塔中国居民膳食宝塔共分五层,包含我们每天应吃的主食种类。膳食宝塔各层位置和面积不同,这在一定程度上反应出各类食物在膳食中的地位和应占的比重。第一层是谷薯类食物,每人每天应该吃2504青未了时光啊,你是否可以慢些走图文洳语编辑洳语人生天地之间,若白驹之过隙,忽然而已。时间总是过得飞快,在一眨眼一投足之间就如流水一般消失不见了。前些日子,法桐树上的叶子还是茂密繁多,彩衣飘飘,几阵秋风萧瑟,便已中药狗脊狗脊,乍听起来以为是狗的脊背。但其实,狗脊是一种常用植物性中药,今聊聊。狗脊,始载于神农本草经,又名百枝。苏恭根长多歧,状如狗之脊骨故以名之。又名强膂扶筋,时珍谓以功名也。尚有狗青不帮阿根廷!英媒梅西和沙特达成协议,帮助其申办2030年世界杯北京时间11月22日,英媒的消息,梅西已经与沙特足协达成协议,帮助他们申办2030年世界杯。沙特是联合非洲的埃及和欧洲希腊一起申办,如果成功,将成为第一届欧亚非世界杯比赛。与此同时卡塔尔王子帅到我了!穿白袍络腮胡尽显男人魅力,小贝都被比下去随着世界杯的开幕,举办地卡塔尔也成功走入全球球迷的视线中,关于卡塔尔的各种新闻层出不穷,不管是在开幕仪式上惊艳亮相的卡塔尔太后,还是看球,被做成表情包的卡塔尔王子都成功火出圈,引来47岁小贝遇到对手,与卡塔尔王子同框输了卡塔尔世界杯正如火如荼进行中,除了耳熟能详的梅西C罗和内马尔等人,还有一些熟悉的面孔,比如贝克汉姆。卡塔尔世界杯请贝克汉姆做代言人,10年长约,1。5亿英镑,约8亿人民币,但对中东沙特门将奥韦斯身价仅70万欧,却挡住了世界第3阿根廷22日,2022卡塔尔世界杯迎来第一个大冷门,世界第3阿根廷队出师不利,12负于国际排名比自己低48位的沙特阿拉伯队。沙特队除了下半场用闪电战打入两球惊讶世界外,他们的门将穆罕默德德国队VS日本队德国国家队历史上5次参加世界杯比赛没有净胜对手1球或以上数据,在世界杯历史上,过去9场比赛,有6场上半场零封对手,球队上一次在世界杯历史上保持不败(2002年)还要追溯到1984年不要脸?皮蓬前妻与乔丹儿子约会被骂,48岁超模穿透视裤用力过猛皮蓬前妻拉尔萨与乔丹二儿子马库斯乔丹约会,两人一起去看了NFL洛杉矶闪电队比赛。让拉尔萨没有想到的是,在观看比赛之时,她竟然被一位球迷劈头盖脸一通怒骂。该球迷质问拉尔萨在干什么,为冷门推荐,丹麦神话再上演两日连红继续推荐丹麦队在经历了去年欧洲杯埃里克森的心脏骤停之后,重新强势回归世界杯赛场,作为场上的绝对英雄,埃里克森身边缺少了温德,达姆斯高这样的助力。整体实力上受到了一定的影响。但从技战术角度讲世界杯伊朗队拒唱国歌!对于女性权益的维护从未停止11月21日晚,世界杯小组赛首轮B组比赛中,英格兰队对战伊朗队。赛前双方唱国歌环节,伊朗队全队拒绝唱国歌,保持沉默,以此表达他们支持国内女性争取自由不戴头巾的权利。此前,伊朗梅西前
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网