当前位置: 首页 > 后端技术 > Java

什么是Netty编解码器,什么是Netty编解码器?如何使用Protostuff?

时间:2023-04-01 21:34:51 Java

您好!大家好,我是小七,一个爱分享的程序员。小七打算在轻松幽默的对话中分享一些技术。如果你觉得通过小七的文章有所收获,那就给小七点赞吧。持续更新,可以微信搜索【小七JAVA专访】第一时间阅读,回复【资讯】我已经为你准备好了福利!回复【项目】有一些项目源码我给大家准备好了。回复【简历模板】我有一份简历模板给你。1.前言接上次。昨天下雨,我没有去街上散步。今天是个晴天。我要去街上看老人下棋。毕竟我的棋艺在我们人才村也是排在前列的。我去给他们指点。走到街上,看不到有人下棋,我就纳闷,这么好的天怎么没有叔叔出来下棋,难道阿姨只是拿着扫帚过来打扫卫生吗?向上?这时,就看到狗蛋他们在路边玩玻璃球。他们一般都是村里的小探子,肯定知道村里发生的事情。我:小狗,你们今天有看到老爷子下棋吗?狗蛋:原来如此,大叔估计赌的很凶吧。我:它在哪里?为什么我没看到。狗蛋:走吧,我回家骑坐骑送你。我:狗蛋哥,我们等一会,你看,这狗眼睛都睁不开了,走吧。狗蛋:走吧。狗蛋领着我走了七八条街,转了十几个弯,就快到镇上了。终于,我看到了我们村里下棋的老人们。我:爷爷,我们下棋怎么跑那么远,再走两步就出国了。..舅舅:没办法,你舅妈新买了一把大扫帚,打人很疼,你得跑远点。我:对,那你先上,谁输了就换我。就在我给大叔耍一招用车砸对方大象眼的时候,我的手机响了。我:“你好”。对面:“你好,请问是小七吗?”我:“是我,你呢?”。对面:“我是XXX公司的,看到hr给我推了你的简历,感觉还不错,你什么时候方便过来现场面试。”我:“现在不方便现场面试。”对面:“好的,你现在方便吗?我们现在进行在线面试。”我:“好的”。2.面试面试官:我看你简历上写的是精通Netty,能简单说一下Netty编解码器是什么吗?我:我们在使用Netty发送或者接收消息的时候,都会有一个编码或者解码。例如,当我们收到来自外部的消息时,我们将对消息进行解码。如果我们发送消息,我们会将消息(比如java对象)编码成二进制发送出去,因为消息在实际传输过程中是以二进制格式传输的。面试官:Netty有哪些编解码器?我:Netty提供了很多编解码器,比如字符串编码的StringEncoder,字符串解码的StringDecoder,对象编码的ObjectEncoder,对象解码的ObjectDecoder。面试官:我觉得这些编解码器效率有点低。有没有更高效的编解码器?我:我们可以使用protostuff,protostuff是一种基于protobuf的序列化方式,可以实现序列化,性能损耗极低。面试官:如何使用protostuff?我:先引入依赖。com.dyuproject.protostuffprotostuff-api<版本>1.0.10com.dyuproject.protostuffprotostuff-core1.0.10com.dyuproject.protostuffprotostuff-runtime1.0.10我:那就新建一个序列化工具类。publicclassProtostuffUtil{privatestaticMap,Schema>cachedSchema=newConcurrentHashMap,Schema>();privatestaticSchemagetSchema(Classclazz){@SuppressWarnings("unchecked")Schemaschema=(Schema)cachedSchema.get(clazz);}if(schema==null){schema=RuntimeSchema.getSchema(clazz);如果(架构!=null){cachedSchema.put(clazz,架构);}}返回模式;}我:编写序列化反序列化方法。/***序列化**@paramobj*@return*/publicstaticbyte[]serializer(Tobj){@SuppressWarnings("unchecked")Classclazz=(Class)obj.得到类();LinkedBufferbuffer=LinkedBuffer.allocate(LinkedBuffer.DEFAULT_BUFFER_SIZE);尝试{Schemaschema=getSchema(clazz);返回ProtostuffIOUtil.toByteArray(obj,schema,buffer);}catch(Exceptione){thrownewIllegalStateException(e.getMessage(),e);}最后{buffer.clear();}}/***反序列化**@paramdata*@paramclazz*@return*/publicstaticTdeserializer(byte[]data,Classclazz){try{Tobj=clazz.newInstance();模式模式=getSchema(clazz);ProtostuffIOUtil.mergeFrom(数据,对象,模式);返回对象;}catch(Exceptione){thrownewIllegalStateException(e.getMessage(),e);}}面试官:“小伙子不错,什么时候回北京入职?”我:“呃……等等,现在还有很多公司等着谈薪水,我得选一家合适的。”采访者:“你想要多少我都给你,来找我。”我:“呃……那么月薪100W。”面试官:“哎,我听不见你在说什么,信号不好。..我:“喂,你好”(嘟嘟嘟嘟嘟嘟……)。3.小结这里的相关内容暂未整理,后续会继续更新文章。建议加入书签。文中涉及的命令一定是像我一样每一个都要敲好几遍。只有在敲打的过程中,才能发现自己是否真正掌握了命令。如果觉得我的文章还不错,请点个赞。另外可以搜索【微信小七??JAVA】面试】第一时间阅读,回复【资讯】我为你准备的福利!回复【项目】有我给你准备的一些项目源码。回复【简历模板】有我为你准备的简历模板。