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());



    }


 

posted @ 2020-07-08 07:11  jasmineTang  阅读(72)  评论(0)    收藏  举报