欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

固定長度解碼器

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

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

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

看其類的定義

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);
        }
        //保存當(dāng)前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 {
            //當(dāng)前累加器中截取這個長度的數(shù)值
            return in.readRetainedSlice(frameLength);
        }
    }
}

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

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

再看decode方法, 在decode方法中又調(diào)用了自身另一個重載的decode方法進(jìn)行解析, 解析出來之后將解析后的數(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ù)進(jìn)行解碼

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

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

相關(guān)文章

  • Java中Calendar日期類常用方法演示

    Java中Calendar日期類常用方法演示

    這篇文章主要給大家介紹了關(guān)于Java中Calendar日期類用法詳細(xì)介紹的相關(guān)資料,Calendar類是?Java?中用于處理日期和時間的抽象類,它提供了一種獨立于特定日歷系統(tǒng)的方式來處理日期和時間,需要的朋友可以參考下
    2023-12-12
  • Java常用加密算法實例總結(jié)

    Java常用加密算法實例總結(jié)

    這篇文章主要介紹了Java常用加密算法,結(jié)合實例形式總結(jié)分析了base64、md5、sha、rsa、des等加密算法實現(xiàn)技巧,需要的朋友可以參考下
    2017-10-10
  • Java數(shù)組與堆棧相關(guān)知識總結(jié)

    Java數(shù)組與堆棧相關(guān)知識總結(jié)

    今天給大家?guī)淼氖顷P(guān)于Java的相關(guān)知識,文章圍繞著Java數(shù)組與堆棧展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • 滴滴二面之Kafka如何讀寫副本消息的

    滴滴二面之Kafka如何讀寫副本消息的

    這篇文章主要給大家介紹了關(guān)于滴滴二面之Kafka如何讀寫副本消息的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2022-01-01
  • Java注釋和關(guān)鍵字實例詳解

    Java注釋和關(guān)鍵字實例詳解

    注釋是對程序語言的說明,有助于開發(fā)者和用戶之間的交流,方便理解程序,注釋不是編程語句,因此被編譯器忽略,下面這篇文章主要給大家介紹了關(guān)于Java注釋和關(guān)鍵字的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • 一文搞懂Java中的反射機(jī)制

    一文搞懂Java中的反射機(jī)制

    Java的反射機(jī)制是在運(yùn)行狀態(tài)中,對于任何一個類,都可以知道這個類的所有屬性和方法,對于任何一個對象,都可以調(diào)用它所有的方法和屬性,修改部分類型信息。本文就來詳細(xì)講講Java反射機(jī)制的使用
    2022-07-07
  • SpringBoot整合Dubbo框架,實現(xiàn)RPC服務(wù)遠(yuǎn)程調(diào)用

    SpringBoot整合Dubbo框架,實現(xiàn)RPC服務(wù)遠(yuǎn)程調(diào)用

    Dubbo是一款高性能、輕量級的開源Java RPC框架,它提供了三大核心能力:面向接口的遠(yuǎn)程方法調(diào)用,智能容錯和負(fù)載均衡,以及服務(wù)自動注冊和發(fā)現(xiàn)。今天就來看下SpringBoot整合Dubbo框架的步驟
    2021-06-06
  • log4j.properties 配置(實例講解)

    log4j.properties 配置(實例講解)

    下面小編就為大家?guī)硪黄猯og4j.properties 配置(實例講解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • java內(nèi)部類使用總結(jié)

    java內(nèi)部類使用總結(jié)

    本文主要介紹了java內(nèi)部類使用總結(jié)。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • Java 之類型轉(zhuǎn)換與多態(tài)詳情

    Java 之類型轉(zhuǎn)換與多態(tài)詳情

    Java使用類創(chuàng)造新的類型(type),并使用繼承來便利我們創(chuàng)建類。再深一層講類型,并是多態(tài)(polymorphism)的概念。本文將給大家介紹Java 的類型轉(zhuǎn)換與多態(tài),需要的小伙伴可以參考下面文章的具體內(nèi)容
    2021-09-09

最新評論