JAVA(8)-EmbeddedChannel-encode-decode
数据在网络上传输时都是0,1。数据编码是必然面对的。本文给出了test基本步骤示例。我的感受,改一步测一点。
编码:encode 消息体转换成字节数组
解码:decode 字节数组转换成消息体
编码:encode 消息体转换成字节数组
1.建立管道
2.添加编码器
3.在管道里创建一个空间
4.把内容写入管道
5.验证读出来,判断内存值和期望值
//消息转成字节数组
@Test
void encode() {
//1.建立管道
EmbeddedChannel ch=new EmbeddedChannel();
//2.添加编码器
ch.pipeline().addLast(new MsgEncoder());
//3.在管道里创建一个空间 一个!!
Player p=new Player(50,100, Dir.R, Group.BAD);
TestMsg tm= new TestMsg(p);
//4.把内容写入管道
ch.writeOutbound(tm);
//5.验证 读出来 判断内存值和期望值
ByteBuf buf=ch.readOutbound();
int length=buf.readInt();
int x=buf.readInt();
int y=buf.readInt();
Dir dir=Dir.values()[buf.readInt()];
boolean moving=buf.readBoolean();
Group group=Group.values()[buf.readInt()];
UUID id=new UUID(buf.readLong(),buf.readLong());
assertEquals(33,length);
assertEquals(50,x);
assertEquals(100,y);
assertEquals(Dir.R,dir);
assertfalse(moving);
}
解码:decode 字节数组转换成消息体
1.建立管道
2.添加解码器
3.写入buf空间
4.把buf内容塞入管道
5.把buf内容读出来,判断内存值和期望值
@Test
void decode()
{
//1.建立管道
EmbeddedChannel ch=new EmbeddedChannel();
//2.添加解码器
ch.pipeline().addLast(new MsgDecoder());
//3.写入buf空间
UUID id=UUID.randomUUID();
ByteBuf buf= Unpooled.buffer();
buf.writeInt(33);
buf.writeInt(5);
buf.writeInt(Dir.D.ordinal());
buf.writeBoolean(true);
buf.writeInt(Group.GOOD.ordinal());
buf.writeLong(id.getMostSignificantBits());
buf.writeLong(id.getLeastSignificantBits());
//4.把buf内容塞入管道
ch.writeInbound(buf);
//5.把buf内容读取出来
TankJoinMsg tm=ch.readInbound();
assertEquals(5,tm.getX());
assertEquals(8,tm.getY());
assertEquals(Dir.D,tm.getDir());
assertTrue(tm.isMoving());
assertTrue(Group.GOOD,tm.getGroup());
assertEquals(id,tm.getId());
}

浙公网安备 33010602011771号