MessageDecoder的接口如下所示:
public interface MessageDecoder {
static MessageDecoderResult OK = MessageDecoderResult.OK;
static MessageDecoderResult NEED_DATA = MessageDecoderResult.NEED_DATA;
static MessageDecoderResult NOT_OK = MessageDecoderResult.NOT_OK;
MessageDecoderResult decodable(IoSession session, IoBuffer in);
MessageDecoderResult decode(IoSession session, IoBuffer in,
ProtocolDecoderOutput out) throws Exception;
void finishDecode(IoSession session, ProtocolDecoderOutput out) throws Exception;
}
(1.)decodable()方法有三个返回值,分别表示如下的含义:
A.MessageDecoderResult.NOT_OK:表示这个不适合解码数据,然后检查其它,如果都不满足会抛异常;
B.MessageDecoderResult.NEED_DATA:表示当前的读入的数据不够判断是否能够使用这个解码,然后再次调用decodable()方法检查其它,如果都是NEED_DATA,则等待下次输入;
第一个方法没怎么接触过,查一下文档先,原来是可以取消之前通过 performselector:withobject:afterdelay: 触发的方法,为了加深印象,顺便 google 一下这个方法,原来 performselector:withobject:afterdelay 在方法被执行前,会持有 object,方法执行后在解除对 object 的持有,如果不小心多次调用这个方法就有可能导致内存泄露,所以在调用此方法前先 cancel 一下是个好习惯。这个队列应该相当于和编码器之间的一个缓冲区,方内容进去,编码器从中取内容出来。终极解码以及完美解码设置指南(下)在这里和大家说明一下,既然是对rmvb/,这一步更为重要,我们在终极解码或者完美解码里调用这个选项,kmplayer默认的设置一样可以对各种格式的影音文件播放,并且自由度不算高。一般遇到unicodedecodeerror错误,首先检查调用decode时的指定的dec_mode是否和待解码str自身的编码方式是否一致。
(2.)decode()方法有三个返回值,分别表示如下的含义:
A.MessageDecoderResult.NOT_OK:表示解码失败,会抛异常;
B.MessageDecoderResult.NEED_DATA:表示数据不够,需要读到新的数据后,再次调用decode()方法。
C.MessageDecoderResult.OK:表示解码成功。
代码演示:
(1.)客户端发送的数据对象:
package com.dxz.minademo4;
public class SendMessage {
private int i = 0;
private int j = 0;
private char symbol = '+';
public char getSymbol() {
return symbol;
}
public void setSymbol(char symbol) {
this.symbol = symbol;
}
public int getI() {
return i;
}
public void setI(int i) {
this.i = i;
}
public int getJ() {
return j;
}
public void setJ(int j) {
this.j = j;
}
}
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/ruanjian/article-93147-31.html
在中国出现这样的事真是平常而又平常的
烊烊棒棒哒你就是我们心中的小王子
为美企输送资金助其度过难关