学习Android推送功能笔记(6)---Mina--CodecFactory自定义和一点别的扩展

这篇博客介绍了如何在Android中使用Mina框架实现自定义CodecFactory,详细讲解了自定义加解码器的步骤以及如何防止数据丢失。通过累积解码器(CumulativeProtocolDecoder)确保消息完整传输,避免因缺失特定分隔符而导致的数据丢失问题。此外,还提及了在Client端使用Mina的相关配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学习了Mina的自定义CodcFactory(自定义加解码器)

  • 第一步:新建一个MyCodecFactory类并实现 ProtocolCodecFactory接口,实现必须的方法getDecodergetEncoder方法,Decorder就是解码器,Encoder就是加码器
    这两个要自己编写.
  • 第二步:新建MyEncoder类和MyDecoder类,分别实现ProtocolEncoderProtocolDecoder接口.其中主要实现的方法分别为encode和’decode’
    public void encode(IoSession session, Object message, ProtocolEncoderOutput out)throws Exception 

该方法的参数,session表示会话,传送过来的会话封装一些信息参数,message表示要发送的消息,out 表示被封装后的输出流,消息处理好后用out发出,decode与此类似

防止数据丢失

现在客户端所有的消息都是添加了一个\n然后发送到服务端的,服务端根据发送过来的字符串解析遇到”\n”才会读取, 如果没有\n,那么服务器是不会读取的,再次接收到导游”\n”的数据,那么上一个带有”\n”的消息就会丢失,
Mina为了处理这种情况自带了一个Decoder类叫做CumulativeProtocolDecoder顾名思义累积的解码器,也就是说,上次没有输出的信息会累加到下次遇到”\n”,当然,”\n”只是在本例中,我们可以根据自己的情况而定.

protected boolean doDecode(IoSession session, IoBuffer in,
ProtocolDecoderOutput out) throws Exception

可见这个方法跟ProtocolEncoder最明显的区别就是这个方法有个bool类型的返回值,这个值代表如果确实通过out输出了,则返回true,否则返回false,返回false,数据不会丢失,累加到下次输出.

实际用处

  • 比如一段XML很长,可能一开始发送了<aa>接着有发送了一段具体的内容<body>hello<body>之类的,那么就要用到cumulativeProtocolDecoder了等

Client使用Mina

建立的时NioSocketConnector,Handler也要用,以及ProtocolCodercFiliter,socketAddress,传输数据还是用session

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值