`
xiaoZ5919
  • 浏览: 405489 次
  • 性别: Icon_minigender_1
  • 来自: 安平人@北京
博客专栏
Group-logo
Netty学习笔记
浏览量:73255
社区版块
存档分类
最新评论

Netty笔记:ReplayingDecoder中buffer使用的一点小陷阱

 
阅读更多

   ReplayingDecoder的原理是阻塞IO,当没有读到足够的数据时,会抛出RelayError,进入以后的LOOP中不断check是否有足够的数据。因此每次读取时我们倒要check一下buffer的数据。为此Netty提供了ReplayingDecoderBuffer这样一个代理类封装原有的buffer。以readInt为例,首先要检查是否有4个字节可读。不满足抛出ReplayError。

@Override
    public int readInt() {
        checkReadableBytes(4);
        return buffer.readInt();
    }

    private void checkReadableBytes(int readableBytes) {
        if (buffer.readableBytes() < readableBytes) {
            throw REPLAY;
        }
    }
 
     陷阱在哪呢?  我在ReplayingDecoder中使用buffer的readableBytes()发现总是一个很大数字,这个数据非常大明显超出我的数据整帧的大小好多倍。很蹊跷,我查看了一下代码发现

 @Override
    public int readableBytes() {
        if (terminated) {
            return buffer.readableBytes();
        } else {
            return Integer.MAX_VALUE - buffer.readerIndex();
        }
    } 
 
从结果上看terminated为false,所以他返回了Integer.MAX_VALUE - buffer.readerIndex();。terminated是什么呢有什么作用呢我又查看了code,terminated仅在cleanup的时候。当terminated为true才会读到真实buffer的readableBytes和capacity。并且ReplayingDecoderBuffer为protected,只能package内部使用,我们就不能将buffer转型为该类。至于terminated的作用还是没有想明白,还是尽量别用readableBytes这个方法,绕过他去吧。



0
0
分享到:
评论

相关推荐

    netty-buffer-4.1.68.Final-API文档-中文版.zip

    Maven坐标:io.netty:netty-buffer:4.1.68.Final; 标签:netty、buffer、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码...

    netty-buffer-4.1.23.Final-API文档-中文版.zip

    Maven坐标:io.netty:netty-buffer:4.1.23.Final; 标签:netty、buffer、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码...

    netty-buffer-4.1.27.Final-API文档-中文版.zip

    Maven坐标:io.netty:netty-buffer:4.1.27.Final; 标签:netty、buffer、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码...

    netty-buffer-4.1.11.Final-API文档-中英对照版.zip

    Maven坐标:io.netty:netty-buffer:4.1.11.Final; 标签:buffer、netty、jar包、java、API文档、中英对照版; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,...

    netty-buffer-4.1.65.Final-API文档-中文版.zip

    Maven坐标:io.netty:netty-buffer:4.1.65.Final; 标签:netty、buffer、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码...

    netty-buffer-4.1.24.Final-API文档-中文版.zip

    Maven坐标:io.netty:netty-buffer:4.1.24.Final; 标签:buffer、netty、jar包、java、API文档、中文版; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中...

    netty-buffer-4.1.65.Final-API文档-中英对照版.zip

    Maven坐标:io.netty:netty-buffer:4.1.65.Final; 标签:netty、buffer、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的...

    netty-buffer-4.1.73.Final-API文档-中文版.zip

    Maven坐标:io.netty:netty-buffer:4.1.73.Final; 标签:buffer、netty、jar包、java、中文文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码...

    netty-buffer-4.1.11.Final-API文档-中文版.zip

    Maven坐标:io.netty:netty-buffer:4.1.11.Final; 标签:buffer、netty、jar包、java、中文文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码...

    netty-buffer-4.1.73.Final-API文档-中英对照版.zip

    Maven坐标:io.netty:netty-buffer:4.1.73.Final; 标签:buffer、netty、jar包、java、中英对照文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的...

    netty-buffer-4.1.16.Final-API文档-中文版.zip

    Maven坐标:io.netty:netty-buffer:4.1.16.Final; 标签:netty、buffer、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码...

    netty-buffer-4.1.74.Final-API文档-中文版.zip

    Maven坐标:io.netty:netty-buffer:4.1.74.Final; 标签:netty、buffer、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码...

    netty-buffer-4.1.23.Final-API文档-中英对照版.zip

    Maven坐标:io.netty:netty-buffer:4.1.23.Final; 标签:netty、buffer、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的...

    netty-buffer-4.1.27.Final-API文档-中英对照版.zip

    Maven坐标:io.netty:netty-buffer:4.1.27.Final; 标签:netty、buffer、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的...

    netty-buffer-4.1.16.Final-API文档-中英对照版.zip

    Maven坐标:io.netty:netty-buffer:4.1.16.Final; 标签:netty、buffer、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的...

    跟闪电侠学Netty:Netty即时聊天实战与底层原理-book-netty.zip

    《跟闪电侠学Netty:Netty即时聊天实战与底层原理》是一本深入浅出的Netty技术指南,旨在帮助读者掌握Netty框架,并利用它实现即时聊天应用,同时理解其底层工作原理。Netty是Java领域的一款高性能、异步事件驱动的...

    netty-common-4.1.65.Final-API文档-中英对照版.zip

    Maven坐标:io.netty:netty-common:4.1.65.Final; 标签:netty、common、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的...

    netty-buffer-4.1.74.Final-API文档-中英对照版.zip

    Maven坐标:io.netty:netty-buffer:4.1.74.Final; 标签:netty、buffer、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的...

    netty-all-4.1.68.Final-API文档-中文版.zip

    Maven坐标:io.netty:netty-all:4.1.68.Final; 标签:netty、all、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构...

    netty-all-4.1.29.Final.jar最新版导入直接用

    Netty 是一个利用 Java 的高级网络的能力,隐藏其背后的复杂性而提供一个易于使用的 API 的客户端/服务器框架。 Netty 是一个广泛使用的 Java 网络编程框架(Netty 在 2011 年获得了Duke's Choice Award,见...

Global site tag (gtag.js) - Google Analytics