1

EmbeddedChannel

我们在前面的章节中知道,ChannelHandler在ChannelPipeline中是有多个链接起来的,当我们只想对某个ChannelHandler进行测试的时候,我们可以用特殊的Channel实现——EmbeddedChannel来达到我们测试的目的。
主要的方法如下:

// 将入站消息写入到EmbeddedChannel中
public boolean writeInbound(Object... msgs)
// 从EmbeddedChannel中读取入站消息
public <T> T readInbound()
// 将出站消息写入到EmbeddedChannel中
public boolean writeInbound(Object... msgs)
// 从EmbeddedChannel中读取出站消息
public <T> T readOutbound()
// 将EmbeddedChannel标记为已完成
public boolean finish()

EmbeddedChannel的数据流
image.png

测试示例

FirstHandler和SecondHandler的代码见之前的代码

public static void main(String[] args) {
    testInbound();
    testOutbound();
}

public static void testOutbound() {
    System.out.println("----------------testOutbound----------------");
    ByteBuf buf = Unpooled.buffer();
    buf.writeBytes("hello".getBytes());
    EmbeddedChannel channel = new EmbeddedChannel(
            new SecondHandler());
    channel.writeOutbound(buf);
    ByteBuf o =channel.readOutbound();
    System.out.println(o.toString(CharsetUtil.UTF_8));
}

public static void testInbound() {
    System.out.println("----------------testInbound----------------");
    ByteBuf buf = Unpooled.buffer();
    buf.writeBytes("hello".getBytes());
    EmbeddedChannel channel = new EmbeddedChannel(
            new FirstHandler());
    channel.writeInbound(buf);
    ByteBuf o = channel.readInbound();
    System.out.println(o.toString(CharsetUtil.UTF_8));
}

运行结果如下:
image.png


大军
847 声望183 粉丝

学而不思则罔,思而不学则殆