• 什么是Netty编解码,Netty编解码器有哪些?Protostuff怎么使用?


    哈喽!大家好,我是小奇,一位热爱分享的程序员
    小奇打算以轻松幽默的对话方式来分享一些技术,如果你觉得通过小奇的文章学到了东西,那就给小奇一个赞吧
    文章持续更新

    一、前言

    书接上回,昨天下雨没怎么上街上溜达,今天是个大晴天,准备去街上看看老头下象棋,毕竟我的象棋技术在我们人才村也排的上号的。我去给他们指点指点。.

    走到街上竟然看不到下象棋的,我就纳闷了,这么好的天怎么可能没有大爷出来下象棋呢,难道大娘刚刚拿着扫帚过来扫荡过?

    在这里插入图片描述

    这时我看到路边狗蛋他们几个在玩玻璃球,他们几个平时在村里属于小间谍了,村里发生了什么肯定门清。

    在这里插入图片描述

    我:狗蛋,你们几个今天看见大爷下象棋了吗?

    狗蛋:看见了,现在大爷估计正下的激烈着呢。

    我:在哪呢?我怎么没看见。

    狗蛋:走,我回家骑上我的坐骑带你去。

    在这里插入图片描述

    我:狗蛋大哥,咱先等会,你看这狗眼睛都压的睁不开了,咱还是走着去吧。

    狗蛋:走。

    狗蛋带领着我走了七八条街道,拐了十几个弯,都快走到镇上了,终于看到了我们村里下棋的大爷们了。

    在这里插入图片描述

    我:大爷啊,咱们下个棋怎么跑这么远,再走两步就出国了。。。

    大爷:没办法啊,你大娘新买了一个大扫帚,打人可疼了呢,必须得跑远点。

    我:得,那你们先下,谁输了就换我。

    正当我给大爷支招,让他用车蹩对方的象眼的时候,我的手机响了。

    我:“喂您好”。

    对面:“您好,请问是小奇吗”。

    我:“是我,你是?”。

    对面:“我是XXX公司的,我看到hr推给我你的简历,我感觉还不错,你什么时候方便来现场面试一下”。

    我:“现在不方便现场面试了”。

    对面:“好吧,那你现在方便吗?我们现在线上面试一下吧”。

    我:“好的”。

    二、面试

    面试官:我看你简历上写的精通Netty,那你能简单说什么是Netty编解码吗?

    我:当我们使用Netty发送或者接收一个消息的时候,就会发生一次编码或者解码,比如我们接收外部传过来的消息,我们会将消息解码,如果发送消息,我们会将消息(例如java对象)编码成二进制发送出去,因为消息在真正传输的过程中是通过二进制格式来传输的。

    面试官:Netty有哪些编解码器呢?

    我:Netty提供了很多编解码器,比如对字符串编码的StringEncoder,对字符串解码的StringDecoder,对对象编码的ObjectEncoder和对对象解码的ObjectDecoder。

    面试官:这些编解码器我感觉效率有点低,有没有什么效率更高的编解码器呢?

    我:我们可以使用protostuff,protostuff是一个基于protobuf实现的序列化方法,他可以在损耗极低的性能情况下做到序列化。

    面试官:protostuff具体怎么使用呢?

    我:首先引入依赖。

    <dependency>
      <groupId>com.dyuproject.protostuff</groupId>
      <artifactId>protostuff‐api</artifactId>
      <version>1.0.10</version>
     </dependency>
     <dependency>
      <groupId>com.dyuproject.protostuff</groupId>
      <artifactId>protostuff‐core</artifactId>
      <version>1.0.10</version>
     </dependency>
     <dependency>
      <groupId>com.dyuproject.protostuff</groupId>
      <artifactId>protostuff‐runtime</artifactId>
      <version>1.0.10</version>
     </dependency>
    

    我:然后新建一个序列化工具类。

    public class ProtostuffUtil {
    
      private static Map<Class<?>, Schema<?>> cachedSchema = new ConcurrentHashMap<Class<?>, Schema<?>>();
    
      private static <T> Schema<T> getSchema(Class<T> clazz) {
      @SuppressWarnings("unchecked")
      Schema<T> schema = (Schema<T>) cachedSchema.get(clazz);
      if (schema == null) {
      schema = RuntimeSchema.getSchema(clazz);
      if (schema != null) {
      cachedSchema.put(clazz, schema);
      }
      }
      return schema;
      }
    

    我:编写序列化反序列化方法。

     /**
      * 序列化
      *
      * @param obj
      * @return
      */
      public static <T> byte[] serializer(T obj) {
      @SuppressWarnings("unchecked")
      Class<T> clazz = (Class<T>) obj.getClass();
      LinkedBuffer buffer = LinkedBuffer.allocate(LinkedBuffer.DEFAULT_BUFFER_SIZE);
      try {
      Schema<T> schema = getSchema(clazz);
      return ProtostuffIOUtil.toByteArray(obj, schema, buffer);
      } catch (Exception e) {
      throw new IllegalStateException(e.getMessage(), e);
      } finally {
      buffer.clear();
      }
      }
    
      /**
      * 反序列化
      *
      * @param data
      * @param clazz
      * @return
      */
      public static <T> T deserializer(byte[] data, Class<T> clazz) {
      try {
      T obj = clazz.newInstance();
      Schema<T> schema = getSchema(clazz);
      ProtostuffIOUtil.mergeFrom(data, obj, schema);
      return obj;
      } catch (Exception e) {
      throw new IllegalStateException(e.getMessage(), e);
      }
      }
    

    面试官:“小伙子不错呀,什么时候能回北京入职呢”

    我:“额。。。等等吧,现在还有好多家公司等着谈薪资呢,我得挑一家合适的。”

    面试官:“你要多少我都给你,来我这吧”

    我:“额。。。那就月薪100个W吧”。

    面试官:“喂,你说什么我听不见,信号不好。。。”

    我:“喂喂喂”(嘟嘟嘟嘟嘟嘟嘟嘟。。。)。

    三、总结

    这里的相关内容还没有整理完毕,文章后面持续更新,建议收藏。

    文章中涉及到的命令大家一定要像我一样每个都敲几遍,只有在敲的过程中才能发现自己对命令是否真正的掌握了。

    如果觉得我的文章还不错的话就点个赞吧

  • 相关阅读:
    电平转换器IC
    如何使用 Blazor 框架在前端浏览器中导入和导出 Excel
    java计算机毕业设计ssm课程建设制作服务平台系统
    【项目实战:核酸检测平台】第四章 冲锋陷阵
    ISP屏幕和LCD屏幕的区别,以及AMOLED、Super AMOLED和OLED
    [已解决]安装的明明是pytorch-gpu,但是condalist却显示cpu版本,而且torch.cuda.is_available 也是flase
    基于PyTorch机器学习与深度学习实践应用与案例分析
    MySQL的安装与配置
    tailwindcss -原子化 CSS 框架
    Ubuntu上运行ProbLog程序的基本方法
  • 原文地址:https://www.cnblogs.com/xiaoqiJava/p/16325576.html