91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Netty分布式固定長度解碼器的示例分析

發布時間:2022-03-29 11:46:26 來源:億速云 閱讀:172 作者:小新 欄目:開發技術

這篇文章主要為大家展示了“Netty分布式固定長度解碼器的示例分析”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“Netty分布式固定長度解碼器的示例分析”這篇文章吧。

固定長度解碼器

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

FixedLengthFrameDecoder是一個固定長度的解碼器, 功能就是根據固定長度, 截取固定大小的字節數進行解碼

看其類的定義

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 {
        //字節是否小于這個固定長度
        if (in.readableBytes() < frameLength) {
            return null;
        } else {
            //當前累加器中截取這個長度的數值
            return in.readRetainedSlice(frameLength);
        }
    }
}

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

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

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

再看重載的decode方法

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

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

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

如果累計器中還有數據, 則會通過ByteToMessageDecoder中callDecode方法里while循環的方式, 繼續進行解碼

這樣, 就是實現了固定長度的解碼工作

以上是“Netty分布式固定長度解碼器的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

凉山| 怀安县| 钟祥市| 务川| 邻水| 安远县| 佛教| 长沙县| 如皋市| 岐山县| 行唐县| 遂溪县| 乐亭县| 青阳县| 尼木县| 环江| 杭锦后旗| 南平市| 潜山县| 孝昌县| 龙海市| 游戏| 林西县| 太仓市| 平山县| 金坛市| 宁明县| 苍山县| 肃北| 如皋市| 孟连| 十堰市| 库尔勒市| 蕉岭县| 克拉玛依市| 云龙县| 顺昌县| 西畴县| 英超| 象山县| 微山县|