mirror of
https://codeup.aliyun.com/67c68d4e484ca2f0a13ac3c1/ydc/jsowell-charger-web.git
synced 2026-04-20 02:55:04 +08:00
45 lines
1.4 KiB
Java
45 lines
1.4 KiB
Java
package rpc;
|
||
|
||
import com.jsowell.common.util.bean.SerializationUtil;
|
||
import io.netty.buffer.ByteBuf;
|
||
import io.netty.channel.ChannelHandlerContext;
|
||
import io.netty.handler.codec.ByteToMessageDecoder;
|
||
|
||
import java.util.List;
|
||
|
||
public class MessageDecode extends ByteToMessageDecoder {
|
||
|
||
|
||
@Override
|
||
protected void decode(ChannelHandlerContext channelHandlerContext, ByteBuf byteBuf, List<Object> list) throws Exception {
|
||
|
||
// 由于数据包的前4个字节用于记录总数据大小,如果数据不够4个字节,不进行读
|
||
if(byteBuf.readableBytes() < 4) {
|
||
return;
|
||
}
|
||
|
||
// 标记开始读的位置
|
||
byteBuf.markReaderIndex();
|
||
|
||
// 前四个字节记录了数据大小
|
||
int dataSize = byteBuf.readInt();
|
||
|
||
// 查看剩余可读字节是否足够,如果不是,重置读取位置,等待下一次解析
|
||
if(byteBuf.readableBytes() < dataSize) {
|
||
byteBuf.resetReaderIndex();
|
||
return;
|
||
}
|
||
|
||
// 读取消息类型
|
||
byte messageType = byteBuf.readByte();
|
||
// 读取数据, 数组大小需要剔除1个字节的消息类型
|
||
byte[] data = new byte[dataSize -1];
|
||
|
||
byteBuf.readBytes(data);
|
||
|
||
Message message = SerializationUtil.deserialize(MessageConstant.getMessageClass(messageType), data);
|
||
|
||
list.add(message);
|
||
}
|
||
|
||
} |