• 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

  • 相关阅读:
    程序清单 8-8 exec函数实例,a.out是程序8-9产生的可执行程序
    程序清单8-9 回送所有命令行参数和所有环境字符串
    程序清单8-3 8-4 演示不同的exit值
    C和指针 3.9作用域、存储类型示例
    程序4-6 utime函数实例
    程序4-5 打开一个文件,然后unlink
    C和指针笔记 3.8 static关键字
    C和指针笔记 3.7 存储类型
    C和指针笔记 3.6链接属性
    python爬虫<urlopen error [Errno 10061] >
  • 原文地址:https://www.cnblogs.com/Desneo/p/7326671.html
Copyright © 2020-2023  润新知