展开全部
回调只是个概念,就是62616964757a686964616fe4b893e5b19e31333335316439把你的接口对应的实现类的一个实例当成一个参数传递给一个函数调用,那个函数处理过程中会调用你的这个接口中的方法。
在下面这个方法中,formatter 是一个回调,因为 receiveMessage 本来是被你调用的,但它回过头来调用你提供的 MsgFormatter 方法,这就是概念。
byte[] buffer = ...;
Msg receiveMessage(SocketChannel channel, MsgFormatter formatter) {
// 读取网络数据,并请求 formatter 来识别它是什么格式,如果是某种消息格式的一个完整的报文条目(比如一个完整的QQ消息)就返回它,否则返回 null 并缓存部分不完整的内容并在下一次得到一条完整消息时再返回它。
buffer = getBytes(channel);
// 读取到部分字节后询问 formatter 来猜测一下它的格式,这是否一条完整消息以及消息类型。
boolean fullyReceived = formatter.guessFormat(buffer);
if (fullyReceived) {
Msg msg = formatter.decode(buffer);
// 消息已经处理了,清空缓存的部分内容,下次重新接收。
buffer = ... ;
return msg;
} else {
return null;
}
}