最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Netty分布式固定長度解碼器實現(xiàn)原理剖析

 更新時間:2022年03月29日 09:57:43   作者:向南是個萬人迷  
這篇文章主要為大家介紹了Netty分布式固定長度解碼器原理剖析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

固定長度解碼器

上一小節(jié):解碼器讀取數(shù)據(jù)不完整的邏輯剖析

我們了解到, 解碼器需要繼承ByteToMessageDecoder, 并重寫decode方法, 將解析出來的對象放入集合中集合, ByteToMessageDecoder中可以將解析出來的對象向下進行傳播, 這一小節(jié)帶大家剖析一個最簡單的解碼器FixedLengthFrameDecoder, 從它入手了解碼器的相關(guān)原理

FixedLengthFrameDecoder是一個固定長度的解碼器, 功能就是根據(jù)固定長度, 截取固定大小的字節(jié)數(shù)進行解碼

看其類的定義

public class FixedLengthFrameDecoder extends ByteToMessageDecoder {
    //長度大小
    private final int frameLength;
    public FixedLengthFrameDecoder(int frameLength) {
        if (frameLength <= 0) {
            throw new IllegalArgumentException(
                    "frameLength must be a positive integer: " + frameLength);
        }
        //保存當前frameLength
        this.frameLength = frameLength;
    }
    @Override
    protected final void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) throws Exception {
        //通過ByteBuf去解碼.解碼到對象之后添加到out上
        Object decoded = decode(ctx, in);
        if (decoded != null) {
            //將解析到byteBuf添加到對象里面
            out.add(decoded);
        }
    }
    protected Object decode(
            @SuppressWarnings("UnusedParameters") ChannelHandlerContext ctx, ByteBuf in) throws Exception {
        //字節(jié)是否小于這個固定長度
        if (in.readableBytes() < frameLength) {
            return null;
        } else {
            //當前累加器中截取這個長度的數(shù)值
            return in.readRetainedSlice(frameLength);
        }
    }
}

我們看到這個類繼承了ByteToMessageDecoder, 重寫了decode方法

這個類只有一個屬性叫frameLength, 并在構(gòu)造方法中初始化了該屬性

再看decode方法, 在decode方法中又調(diào)用了自身另一個重載的decode方法進行解析, 解析出來之后將解析后的數(shù)據(jù)放在集合out中

再看重載的decode方法

重載的decode方法中首先判斷累加器的字節(jié)數(shù)是否小于固定長度, 如果小于固定長度則返回null, 代表不是一個完整的數(shù)據(jù)包, 直接返回null

如果大于等于固定長度, 則直接從累加器中截取這個長度的數(shù)值

 in.readRetainedSlice(frameLength) 會返回一個新的截取后的ByteBuf, 并將原來的累加器讀指針后移frameLength個字節(jié)

如果累計器中還有數(shù)據(jù), 則會通過ByteToMessageDecoder中callDecode方法里while循環(huán)的方式, 繼續(xù)進行解碼

這樣, 就是實現(xiàn)了固定長度的解碼工作

到此這篇關(guān)于Netty分布式固定長度解碼器實現(xiàn)原理剖析的文章就介紹到這了,更多相關(guān)Netty分布式固定長度解碼器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java中Class類的基礎知識點及實例

    java中Class類的基礎知識點及實例

    在本篇文章里小編給大家分享了關(guān)于java中Class類的基礎知識點及實例內(nèi)容,有興趣的朋友們可以學習下。
    2021-05-05
  • 一文徹底搞懂java多線程和線程池

    一文徹底搞懂java多線程和線程池

    當一個服務器接受到大量短小線程的請求時,使用線程池技術(shù)是非常合適的,它可以大大減少線程的創(chuàng)建和銷毀次數(shù),提高服務器的工作效率,這篇文章主要給大家介紹了如何通過一文徹底搞懂java多線程和線程池的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • Spring容器中添加bean的5種方式

    Spring容器中添加bean的5種方式

    我們知道平時在開發(fā)中使用Spring的時候,都是將對象交由Spring去管理,那么將一個對象加入到Spring容器中,有哪些方式呢,感興趣的可以了解一下
    2021-07-07
  • 實例解析Java日期格式工具類DateUtil.java

    實例解析Java日期格式工具類DateUtil.java

    本文主要對Java日期格式工具類DateUtil.java進行實例解析。具有一定的參考價值,下面跟著小編一起來看下吧
    2017-01-01
  • java中this關(guān)鍵字的詳細使用介紹

    java中this關(guān)鍵字的詳細使用介紹

    大家好,本篇文章主要講的是java中this關(guān)鍵字的詳細使用介紹,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01
  • SpringBoot3實現(xiàn)webclient的通用方法詳解

    SpringBoot3實現(xiàn)webclient的通用方法詳解

    Spring Boot WebClient 是 Spring Framework 5 中引入的一個新的響應式 Web 客戶端,用于異步和響應式地與外部服務進行通信,下面我們就來看看SpringBoot3實現(xiàn)webclient的通用方法吧
    2024-04-04
  • 關(guān)于@ApiImplicitParams、ApiImplicitParam的使用說明

    關(guān)于@ApiImplicitParams、ApiImplicitParam的使用說明

    這篇文章主要介紹了關(guān)于@ApiImplicitParams、ApiImplicitParam的使用說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Java 數(shù)據(jù)結(jié)構(gòu)進階二叉樹題集上

    Java 數(shù)據(jù)結(jié)構(gòu)進階二叉樹題集上

    二叉樹可以簡單理解為對于一個節(jié)點來說,最多擁有一個上級節(jié)點,同時最多具備左右兩個下級節(jié)點的數(shù)據(jù)結(jié)構(gòu)。本文將帶你通過實際題目來熟練掌握
    2022-04-04
  • Java?C++題解leetcode1441用棧操作構(gòu)建數(shù)組示例

    Java?C++題解leetcode1441用棧操作構(gòu)建數(shù)組示例

    這篇文章主要為大家介紹了Java?C++題解leetcode1441用棧操作構(gòu)建數(shù)組示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • SpringCloud注冊中心之consul詳細講解使用方法

    SpringCloud注冊中心之consul詳細講解使用方法

    Consul是一款由HashiCorp公司開源的,用于服務治理的軟件,Spring Cloud Consul對其進行了封裝,這篇文章主要介紹了springcloud組件consul服務治理,需要的朋友可以參考下
    2022-11-11

最新評論

北川| 宁陕县| 兴业县| 南康市| 启东市| 英吉沙县| 江达县| 奉贤区| 金塔县| 胶州市| 新巴尔虎右旗| 中牟县| 壶关县| 莱州市| 新津县| 满洲里市| 来宾市| 政和县| 余庆县| 洛隆县| 日土县| 广西| 安吉县| 奉新县| 石渠县| 清原| 高尔夫| 报价| 连云港市| 阜南县| 汾西县| 黑河市| 威信县| 沙田区| 古蔺县| 镇雄县| 蒙山县| 凤山县| 明水县| 囊谦县| 南溪县|