我最近与Netty进行了一些合作,并且按照此出色的教程中的说明构建了编码器/解码器管道,以测试编码器和解码器是否在正常工作而不必发送真实的消息。

幸运的是,有一个EmbeddedChannel确实使我们的生活变得非常轻松。

假设我们有一条消息“ Foo”,我们想通过网络发送。 它仅包含一个整数值,因此我们只需要发送该值并在另一侧重建“ Foo”即可。

我们可以编写以下编码器来执行此操作:

// Examples uses Netty 4.0.28.Final
public static class MessageEncoder extends MessageToMessageEncoder<Foo>
{@Overrideprotected void encode( ChannelHandlerContext ctx, Foo msg, List<Object> out ) throws Exception{ByteBuf buf = ctx.alloc().buffer();buf.writeInt( msg.value() );out.add( buf );}
}public static class Foo
{private Integer value;public Foo(Integer value){this.value = value;}public int value(){return value;}
}

因此,我们要做的就是从“ Foo”中取出“ value”字段,并将其放入要传递到下游的列表中。

让我们编写一个测试,该测试模拟发送“ Foo”消息并使用空的解码器尝试处理该消息:

@Test
public void shouldEncodeAndDecodeVoteRequest()
{// givenEmbeddedChannel channel = new EmbeddedChannel( new MessageEncoder(), new MessageDecoder() );// whenFoo foo = new Foo( 42 );channel.writeOutbound( foo );channel.writeInbound( channel.readOutbound() );// thenFoo returnedFoo = (Foo) channel.readInbound();assertNotNull(returnedFoo);assertEquals( foo.value(), returnedFoo.value() );
}public static class MessageDecoder extends MessageToMessageDecoder<ByteBuf>
{@Overrideprotected void decode( ChannelHandlerContext ctx, ByteBuf msg, List<Object> out ) throws Exception { }
}

因此,在测试中,我们将“ Foo”写入出站通道,然后将其读回入站通道,然后检查所获得的内容。 如果现在运行该测试,将会看到以下内容:

junit.framework.AssertionFailedErrorat NettyTest.shouldEncodeAndDecodeVoteRequest(NettyTest.java:28)

我们返回的消息为空,这是有意义的,因为我们不必费心编写解码器。 然后让我们实现解码器:

public static class MessageDecoder extends MessageToMessageDecoder<ByteBuf>
{@Overrideprotected void decode( ChannelHandlerContext ctx, ByteBuf msg, List<Object> out ) throws Exception{int value = msg.readInt();out.add( new Foo(value) );}
}

现在,如果我们再次运行测试,那就一切顺利了。 现在,我们可以对一些更复杂的结构进行编码/解码,并相应地更新测试。

翻译自: https://www.javacodegeeks.com/2015/06/netty-testing-encodersdecoders.html

净值:测试编码器/解码器相关推荐

  1. 编码器-解码器(seq2seq)

    文章目录 1.编码器解码器架构 1.1.概念 1.2.代码 1.2.1.编码器(Encoder) 1.2.2.解码器(Decoder) 1.2.3.合并编码器和解码器 2.seq2seq模型 2.1. ...

  2. 使用基于注意力的编码器-解码器实现医学图像描述

    来源:DeepHub IMBA 本文约8000字,建议阅读10+分钟 本文为你介绍使用计算机视觉和自然语言处理来为X 射线的图像生成文本描述. 什么是图像描述 图像描述是生成图像文本描述的过程.它使用 ...

  3. 编码器—解码器和注意力机制

    在基于词语的语言模型中,我们使用了循环神经网络.它的输入是一段不定长的序列,输出却是定长的,例如一个词语.然而,很多问题的输出也是不定长的序列.以机器翻译为例,输入是可以是英语的一段话,输出可以是法语 ...

  4. 采用编码器-解码器匹配语义分割的图像压缩

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 小白导读 论文是学术研究的精华和未来发展的明灯.小白决心每天为大家 ...

  5. 深度学习之seq2seq、编码器解码器、注意力机制、Transformer

    深度学习之seq2seq.编码器解码器(Encoder-Decoder).注意力机制(Attention).变换器(Transformer) 目录

  6. 【神经网络】MLP 编码器-解码器 注意力机制 残差连接

    [1] 多层感知机(MLP)   最典型的MLP包括包括三层:输入层.隐层和输出层,MLP神经网络不同层之间是全连接的(全连接的意思就是:上一层的任何一个神经元与下一层的所有神经元都有连接).   由 ...

  7. python之simplejson,Python版的简单、 快速、 可扩展 JSON 编码器/解码器

    simplejson Python版的简单. 快速. 可扩展 JSON 编码器/解码器 编码基本的 Python 对象层次结构: import simplejson as jsonprint json ...

  8. 【深度学习】图文并茂!用Keras LSTM构建编码器-解码器模型

    作者 | Nechu BM 编译 | VK 来源 | Towards Data Science 基础知识:了解本文之前最好拥有关于循环神经网络(RNN)和编解码器的知识. 本文是关于如何使用Pytho ...

  9. 机器学习中的编码器-解码器结构哲学

    其它机器学习.深度学习算法的全面系统讲解可以阅读<机器学习-原理.算法与应用>,清华大学出版社,雷明著,由SIGAI公众号作者倾力打造. 书的购买链接 书的勘误,优化,源代码资源 本文PD ...

最新文章

  1. 灵活运用分布式锁解决数据重复插入问题
  2. [Nhibernate]SchemaExport工具的使用(二)——创建表及其约束、存储过程、视图
  3. 混合索引_数据库面试题:查询在什么情况下不?索引-数据库知识点
  4. Kanboard简单的可视化任务板,项目管理
  5. PyTorch学习笔记:torch.optim---Optimizer以及lr_scheduler
  6. 非功能性需求_非接触式喷射自动点胶机的优势在哪儿?
  7. OpenXava 4.5支持JPA继承映射和自动化业务逻辑
  8. 《机器学习实战》第二章学习笔记:K-近邻算法(代码详解)
  9. Vue中子组件向父组件请求数据时的数据格式问题
  10. oracle-merge语法
  11. OneDrive网盘资源下载教程
  12. codeforces1549 F1 - Gregor and the Odd Cows (Easy)(皮克公式)
  13. 计算机病毒课后讨论题,《防治计算机病毒》答辩题目及解析
  14. property、setter、deleter装饰器的使用
  15. EAX、ECX、EDX、EBX
  16. html5在微信浏览器下调用复制功能
  17. 手游开发Android平台周边工具介绍
  18. 1 STM32F407ZG的简单介绍
  19. GestureOverlayView
  20. 强大合作伙伴生态系统助力 Denodo 在大中华区不断发展壮大

热门文章

  1. C#实现人脸识别【Users】
  2. 求素数为什么到平方根就行了
  3. Android 隐藏底部三个虚拟按键
  4. docker 安装elasticsearch
  5. java编程学习方法_在线学习Java编程的最佳方法
  6. stripe pay_J2Pay –入门
  7. angular jwt_Angular5 JWT身份验证(Spring Boot安全性)
  8. java ee 8 api_Java EE 8安全性API:概述
  9. tibco汉化包6.3.0_TIBCO BusinessWorks 6和Container Edition与BW5的比较
  10. javafx有布局管理器吗_JavaFX技巧17:带有AnchorPane的动画工作台布局