zoukankan      html  css  js  c++  java
  • 为什么需要“二次”解码器

    参考文献:极客时间傅健老师的《Netty源码剖析与实战》Talk is cheap.show me the code!

     

      上一篇随笔说了解决TCP粘包、半包的一次解码器都是继承的ByteToMessageDecoder,而ByteToMessageDecoder主要是将原始数据流(可能存在粘包、半包问题的数据流)转换为用户数据(是一个字节数组)。所以我们需要二次解码器(都是直接继承MessageToMessageDecoder)将字节数组转换成Java对象。

      有人会问能否将两次解码合二为一?这里是不建议的,首先没有分层感,不够清晰,其次就是耦合性太高,Java是最忌讳耦合性高的方案的。

    常用的“二次”编解码方式有哪些?

      Java序列化(占空间,其他语言不支持),Marshaling,XML(也是占用比较大),JSON(比XML占空间小,但是没有XML那么通用性),MessagePack(比JSON占用空间还小,却没有它可读性好),Protobuf,其他...

    如此多的编解码方式该如何选择呢?首先考虑到的是编码后占用空间,因为编解码的作用很大情况下是为了存储和传输。其次是编解码的速度,再一个就是是否追求可读性,最后一个就是多语言支持,例如MessagePack。综上所述比较合适的有JSON,MessagePack和Protobuf。但是最流行的是ProtoBuf。所以下面简单的介绍下Protobuf。

    Google ProtoBuf简介

      ①Protobuf是一个灵活,高效的用于序列化数据的协议

      ②相比较XML 、JSON,Protobuf更小、更快、更便捷

      ③Protobuf是跨语言的,并且自带了一个编译器(protoc),只需要用它进行编译,可以自动生成Java,C++,Python等代码,不需要再写其他代码(代价是可读性不好,看不懂...)

    我只想做的更好,仅此而已

  • 相关阅读:
    百度地图api
    白岩松视频
    rails3 unicorn部署
    rails3 unicorn部署
    rails3 unicorn部署
    nginx geoip 模块实现地区性负载均衡
    workingwithrails
    rails部署方案
    rails3使用cucumber和rspec进行测试
    rails3 unicorn部署
  • 原文地址:https://www.cnblogs.com/-qilin/p/11691859.html
Copyright © 2011-2022 走看看