zoukankan      html  css  js  c++  java
  • 6

    6.1 解码器

    6.1.1 抽象类-ByteToMessageDecoder

    decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out)
    

    a). 必须实现的抽象方法,调用时传入包含数据的ByteBuf,一个添加解码消息的List, 对这个方法的调用会重复进行,直到byteBuf中没有可读取的数据。
    b). 如果list不为空,那么内容会循环传递给下一个ChannelInBoundHandler

    class DecodeTest extends ByteToMessageDecoder {
        @Override
        protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) throws Exception {
    		//此处不需要while循环
            if( in.readableBytes()>=4 ){
                out.add(in.readInt());
            }
        }
    }
    

    6.1.2 抽象类ReplayingDecoder-慢,简单

    public abstract class ReplayingDecoder<S> extends ByteToMessageDecoder 	//S指定了用于状态管理的类型,可void
    

    a). 扩展了ByteToMessageDecoder,不必调用readableBytes()方法,通过使用自定义的ReplayingDecoderBuf包装ByteBuf实现。
    b). 如果没有足够的字节可用,readInt抛出一个error被基类捕获并处理。当有更多数据时,decode方法将再次被调用

    class ReplayingDecoderTest extends ReplayingDecoder<Void>{
        @Override
        protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) throws Exception {
            out.add(in.readInt());
        }
    }
    

    6.1.3 预置的解码器

    LineBasedFrameDecoder	//行位控制符
    或
    来解析消息
    HttpObjectDecoder		//一个HTTP的解码器
    

    6.1.3 Message

    //对么个消息调用decode方法
    class MessageToMessageDecoderTest extends MessageToMessageDecoder{
        @Override
        protected void decode(ChannelHandlerContext ctx, Object msg, List out) throws Exception {
            out.add(String.valueOf(msg));
        }
    }
    

    6.2 编码器-encode-MessageToBytEncoder/MessageToMessageEncoder

  • 相关阅读:
    CSS属性值一览
    CSS属性一览
    CSS选择器一览
    HTML颜色编码
    游戏
    数据库系统概念
    关于总结
    章节测试
    我的博客皮肤
    Emeditor所有快捷键操作
  • 原文地址:https://www.cnblogs.com/Desneo/p/7326671.html
Copyright © 2011-2022 走看看