Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Netty中发送和接收CompositeByteBuf_Java_Netty - Fatal编程技术网

Java 在Netty中发送和接收CompositeByteBuf

Java 在Netty中发送和接收CompositeByteBuf,java,netty,Java,Netty,对于我的应用程序,我希望能够发送和接收CompositeByteBuf。 我正在使用MessageToMessageEncoder,但我可以 成功发送(等待通过channelFuture.sync()写入,然后检查channelFuture.isDone()是否为真),在接收方,我什么也没有得到。 我一定错过了什么。另外,另一个相关的问题是什么 发送包含以下组件的CompositeByteBuf的最有效方法 特大号?例如,最大大小的直接字节。目前,它对于非常小的缓冲区(测试)失败,但最终将用于大

对于我的应用程序,我希望能够发送和接收CompositeByteBuf。 我正在使用
MessageToMessageEncoder
,但我可以 成功发送(等待通过
channelFuture.sync()
写入,然后检查
channelFuture.isDone()
是否为真),在接收方,我什么也没有得到。 我一定错过了什么。另外,另一个相关的问题是什么 发送包含以下组件的CompositeByteBuf的最有效方法 特大号?例如,最大大小的直接字节。目前,它对于非常小的缓冲区(测试)失败,但最终将用于大型直接堆外缓冲区

以下是我的编码部分:

pipeline.addLast("snappy encoder", new SnappyFrameEncoder());
pipeline.addLast("frameEncoder", new LengthFieldPrepender(8));
pipeline.addLast("bytesEncoder", new MessageToMessageEncoder<CompositeByteBuf>() {
    @Override
    protected void encode(ChannelHandlerContext ctx, CompositeByteBuf msg, List<Object> out) throws Exception {
        out.add(msg);
    }
});
pipeline.addLast("snappy decoder", new SnappyFrameDecoder());
pipeline.addLast("frameDecoder", new LengthFieldBasedFrameDecoder(
      IGraphConstants.NETTY_MAX_FRAME_SIZE, 0, 8, 0, 8));   
pipeline.addLast("bytesDecoder", new MessageToMessageDecoder<CompositeByteBuf>() {
    @Override
    protected void decode(ChannelHandlerContext ctx, CompositeByteBuf msg, List<Object> out) throws Exception {
        msg.retain();
        out.add(msg);
    }
});
pipeline.addLast(“snappy编码器”,新的SnappyFrameEncoder());
pipeline.addLast(“帧编码器”,新的LengthFieldPrepender(8));
addLast(“bytesEncoder”,新的MessageToMessageEncoder(){
@凌驾
受保护的无效编码(ChannelHandlerContext ctx、CompositeByteBuf msg、List out)引发异常{
out.add(msg);
}
});
以及解码部分:

pipeline.addLast("snappy encoder", new SnappyFrameEncoder());
pipeline.addLast("frameEncoder", new LengthFieldPrepender(8));
pipeline.addLast("bytesEncoder", new MessageToMessageEncoder<CompositeByteBuf>() {
    @Override
    protected void encode(ChannelHandlerContext ctx, CompositeByteBuf msg, List<Object> out) throws Exception {
        out.add(msg);
    }
});
pipeline.addLast("snappy decoder", new SnappyFrameDecoder());
pipeline.addLast("frameDecoder", new LengthFieldBasedFrameDecoder(
      IGraphConstants.NETTY_MAX_FRAME_SIZE, 0, 8, 0, 8));   
pipeline.addLast("bytesDecoder", new MessageToMessageDecoder<CompositeByteBuf>() {
    @Override
    protected void decode(ChannelHandlerContext ctx, CompositeByteBuf msg, List<Object> out) throws Exception {
        msg.retain();
        out.add(msg);
    }
});
pipeline.addLast(“snappy解码器”,新的SnappyFrameDecoder());
pipeline.addLast(“frameDecoder”),新的LengthFieldBasedFrameDecoder(
IGraphConstants.NETTY_MAX_FRAME_SIZE,0,8,0,8));
pipeline.addLast(“bytesDecoder”,新MessageToMessageDecoder(){
@凌驾
受保护的无效解码(ChannelHandlerContext ctx、CompositeByteBuf消息、列表输出)引发异常{
msg.retain();
out.add(msg);
}
});

从管道上看,我看不出它不起作用的原因。能否将LoggingHandler插入接收器管道的开头,以便检查实际通信量?嗨,trustin,我使用了LoggingHandler,消息实际收到(字节数),但由于某种原因没有触发解码功能,可能是因为它需要ByteBuf。我最终编写了自己的ByteToMessageDecoder,它更适合我的场景。