纠纷奇闻社交美文家庭
投稿投诉
家庭城市
爱好生活
创业男女
能力餐饮
美文职业
心理周易
母婴奇趣
两性技能
社交传统
新闻范文
工作个人
思考社会
作文职场
家居中考
兴趣安全
解密魅力
奇闻笑话
写作笔记
阅读企业
饮食时事
纠纷案例
初中历史
说说童话
乐趣治疗

序列化与反序列化之Protostuff(一)

8月8日 游鱼坊投稿
  一序列化与反序列化
  在大型开发中,序列化与反序列化是一个常见的技术点和问题。在之前我们对序列化与反序列化有过相关描述,但并不系统,更偏重于原理介绍。这里,我们将详细介绍序列化与反序列化的更多场景和应用实践。
  序列化protobuf的编码结构二概念回顾
  当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把这个Java对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列再恢复为Java对象。
  把Java对象转换为字节序列的过程称为对象的序列化。
  把字节序列恢复为Java对象的过程称为对象的反序列化。三技术方案3。1google的protobuffer
  早期google原生的protobuffer使用起来相当麻烦,首先要写。proto文件,然后编译。proto文件,生成对应的。java文件,过程较为繁琐。不过目前随着protobufjava等jar包的提供,使用也简化了很多。github地址:https:github。comtopicsprotobuffer。3。2Java的序列化与反序列化
  根据Thinkinginjava3rdEdition的描述:
  利用对象序列化可以实现轻量级持久化(lightweightpersistence)。持久化意味着一个对象的生存周期并不取决于程序是否正在执行;它可以生存于程序的调用之间。通过将一个序列化对象写入磁盘,然后在重新调用时恢复该对象,就能够实现持久化的效果。之所以称其为轻量级,是因为不能用某种persistent(持久)关键字来简单地定义一个对象,并让系统自动维护其他细节问题(尽管将来有可能实现)。相反,对象必须在程序中显式地序列化和重组。如果需要一个更严格的持久化机制,可以考虑使用Java数据对象(JDO)或者像Hibernate之类的工具。
  对象序列化的概念加入到语言中是为了提供对两种主要特性的支持:
  Java的远程方法调用(RMI,RemoteMethodInvocation)使存活于其他计算机上的对象使用起来就像是存活于本机上一样。当向远程对象发送消息时,需要通过对象序列化来传输参数和返回值。
  对JavaBeans来说对象序列化也是必需的。使用一个Bean时,一般情况下是在设计阶段对它的状态信息进行配置。这种状态信息必须保存下来,并在程序启动以后,进行恢复;具体工作由对象序列化完成。3。3io。protostuff
  这是最近在项目中使用到的一个框架,本篇也将先详细描述相关的使用案例,作为本系列的开篇。四使用示例4。1引入maven依赖
  使用的是1。5。3版本:dependencygroupIdio。protostuffgroupIdprotostuffruntimeartifactIdversion1。5。3versiondependencydependencygroupIdio。protostuffgroupIdprotostuffcoreartifactIdversion1。5。3versiondependency4。2定义实体类4。2。1ProtoBufEntitypackagecom。flamingskys。toolbox。tool。protobuf。importlombok。DDatapublicclassProtoBufEntity{privateSprivateSpublicProtoBufEntity(){}publicProtoBufEntity(Stringname,Integerage){this。this。}}4。2。2GroupEntity
  这是一个嵌套实体类,包含了上面的ProtoBufEntity:packagecom。flamingskys。toolbox。tool。protobuf。importlombok。Dimportjava。util。LDatapublicclassGroupEntity{privateSprivateSprivateListProtoBufEpublicGroupEntity(Stringid,Stringname,ListProtoBufEntityentities){this。this。this。}}4。2。3应用类ProtoStuffUtilspackagecom。flamingskys。toolbox。tool。importcom。flamingskys。toolbox。tool。protobuf。entity。GroupEimportcom。flamingskys。toolbox。tool。protobuf。entity。ProtoBufEimportio。protostuff。LinkedBimportio。protostuff。ProtostuffIOUimportio。protostuff。Simportio。protostuff。runtime。RuntimeSimportjava。util。ArrayLimportjava。util。Limportjava。util。Mimportjava。util。concurrent。ConcurrentHashMpublicclassProtoStuffUtils{避免每次序列化都重新申请Buffer空间privatestaticLinkedBufferbufferLinkedBuffer。allocate(LinkedBuffer。DEFAULTBUFFERSIZE);缓存SchemaprivatestaticMapC?,S?schemaCachenewConcurrentHashMapC?,S?();序列化方法,把指定对象序列化成字节数组paramobjparamTreturnSuppressWarnings(unchecked)publicstaticTbyte〔〕serialize(Tobj){ClassTclazz(ClassT)obj。getClass();SchemaTschemagetSchema(clazz);byte〔〕try{dataProtostuffIOUtil。toByteArray(obj,schema,buffer);}finally{buffer。clear();}}反序列化方法,将字节数组反序列化成指定Class类型paramdataparamclazzparamTreturnpublicstaticTTdeserialize(byte〔〕data,ClassTclazz){SchemaTschemagetSchema(clazz);Tobjschema。newMessage();ProtostuffIOUtil。mergeFrom(data,obj,schema);}SuppressWarnings(unchecked)privatestaticTSchemaTgetSchema(ClassTclazz){SchemaTschema(SchemaT)schemaCache。get(clazz);if(schemanull){这个schema通过RuntimeSchema进行懒创建并缓存所以可以一直调用RuntimeSchema。getSchema(),这个方法是线程安全的schemaRuntimeSchema。getSchema(clazz);if(schemanull){schemaCache。put(clazz,schema);}}}publicstaticvoidmain(String〔〕args){finalProtoBufEntityentity1newProtoBufEntity(aaa,20);finalProtoBufEntityentity2newProtoBufEntity(bbb,21);ListProtoBufEntityentitysnewArrayListProtoBufEntity(){{add(entity1);add(entity2);}};GroupEntitygroupnewGroupEntity(id1,group1,entitys);byte〔〕bytesProtoStuffUtils。serialize(group);System。out。println(序列化后:bytes。length);GroupEntitygroup1ProtoStuffUtils。deserialize(bytes,GroupEntity。class);System。out。println(反序列化后:group1。getName());}}
投诉 评论 转载

去巴基斯坦旅游,为什么导游提醒男游客不要和陌生女孩搭讪读万卷书不如行万里路,行万里路不如阅人无数。看到这样的思想,可能很多小伙伴会将手中的书放到一边,收拾一下行李,来一场说走就走的旅行。(此处已添加小程序,请到今日头条客户端……三星利润下跌近七成,人民网点破原因,网友奉劝好好做手机近日,三星发布了2022年Q4预测营业利润,约为232。63亿元,同比下滑69,下跌近7成,远低于市场预期。而三星方面将利润下滑的原因归咎于经济不景气,但事实真的如此吗?……嘉庆帝如妃,与皇后关系亲密,圣宠优渥儿女全,备受尊崇高寿终十几年前,有一部港剧开启了宫斗剧时代,这部剧就是《金枝欲孽》,主角如玥在后宫纵横捭阖,开辟了属于自己的天地,这个如玥的原型就是嘉庆帝中后期的宠妃如妃钮祜禄氏,虽然真实的历史没有……序列化与反序列化之Protostuff(一)一序列化与反序列化在大型开发中,序列化与反序列化是一个常见的技术点和问题。在之前我们对序列化与反序列化有过相关描述,但并不系统,更偏重于原理介绍。这里,我们将详细介绍序列……弗劳恩霍夫FraunhoferIPT研究所3D打印新型设计的根据3D科学谷的市场了解,氢正成为应对气候变化的日益重要的能源载体。尽管氢气燃烧不会释放任何二氧化碳,但几乎没有人知道的是,它比燃烧化石燃料产生更多的氮氧化物(NOx)。……渭河滩之紫薇湖由明光路北上至渭河大堤,顺大堤的游览路向西,过了西安湖,就是紫薇湖,紫薇湖在大堤之南,吸引人之处在于有一大片水面,长了很多芦苇,微风过处水面微起涟漪。我们来的早,水边没人,只听……今日钢铁方向利好政策持续,需求环比好转一、宏观消息1。富宝独家解读:原油价格周四回落,石油基础设施似乎在土耳其和叙利亚部分地区地震造成的严重破坏中幸免,且美国库存增加,投资者担心美联储加息。这场已经造成逾1。……期待吗?苹果新一代iPhoneSE3来了,高配低价2022年除了下半年秋季发布会值得关注以外,另外还有34月的春季新品发布会同样受到相当大的关注,原因是苹果将在发布会上带来一款廉价版5GiPhoneiPhoneSE3。根……奶奶又来假装带娃了,5岁孙子的一句话,让奶奶羞愧难当妈妈生,外婆养,爷爷奶奶来欣赏。如今在宝妈圈似乎特别流行这样的一句话,当带娃的任务更多地落到了妈妈和外婆的身上时,奶奶自然落得一身清闲,可在无意中也会和拉大自己和孩子之间……开盖就得放冰箱!蚝油不是油,应该怎么选,怎么用?烹饪美食,很多家庭偏爱用蚝油来提味增鲜。无论是炒菜、凉拌还是调馅、烧烤,似乎都少不了这个美味氛围制造者的参与。然而,蚝油并非是万能提鲜剂,其购买、使用和储存还有很多容易被人忽略……华为WS318无线路由器如何设置上网华为WS318无线路由器连接Internet上网时,正确的连接方式、上网设置、无线wifi设置3个方面的内容。一台新购买(恢复出厂设置后)的华为WS318无线路由器,要连接In……雾云山印象林子,村子,日子。500亩梯田稻香谷黄,600亩茶园百年飘香,倾诉着古老的耕耘与收获,这里便是蕲春县檀林镇雾雲山风景区。4月11日,开启了雾云山风景区休闲自驾之旅。虽说出……
古墓挖出干尸身体竟百年不腐(图)世茂重庆中心一期项目封顶世茂股份中西部征程再启美密歇根大学研究称灭绝恐龙的小行星曾引发全球海啸火烧云是什么解读火烧云是怎样形成的阅读答案爱生活,更爱设计reno终于站起来了!reno9pro开箱详细测评,价格惊喜王者荣耀貂蝉逐梦之音获得方法貂蝉新皮肤怎么样放眼NBA历史,只有这三人完成单核夺冠,这三人注定被历史铭记为什么狗嘴里吐不出象牙不是其他东西美白方法护肤攻略,让你的美白产品更快发挥作用老家发现一条地下通道看完心惊(图)做完胃镜检查后,要谨记这几点,以免身体受到伤害
国足加油低头族常见的颈椎疾病有哪些平衡力发展很关键,4个游戏锻炼宝宝的平衡力公猪配种有哪些注意事项命运之论一事无成林间深处的一只熊31完胜!中超分水岭一战!卫冕冠军抹平劣势,争冠天平开始倾斜共享睡眠舱昙花一现共享经济是否遇上瓶颈终于找到祛斑美白的宝典了!完美girl养成就是现在房价还没跌,为什么有人要求救市?最新韩姓男孩三字名韩姓男宝宝起名合集

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找美丽时装彩妆资讯历史明星乐活安卓数码常识驾车健康苹果问答网络发型电视车载室内电影游戏科学音乐整形