Netty - 使用换行符传输字符串的最佳方法?

时间:2015-05-06 00:15:41

标签: java netty decode encode

我正在研究一种使用DelimiterBasedFrameDecoder进行解码的协议,只要收到换行符就会拆分bytebuf。

不幸的是,必须有可能使用换行符传输字符串。到目前为止,解码器读取字符串中的换行符并相应地创建帧。

我的想法是使用Base64对这些字符串进行编码,并在framedecoder完成其工作后对其进行解码。我现在的问题是,这个问题有更好的解决方案吗? Base64带来了开销以及额外的编码/解码工作。

使用另一个分隔符是不可能的,因为我需要它用于我的协议的头字段。

1 个答案:

答案 0 :(得分:3)

在您的管道中使用基于NUL分隔符的帧解码器和编码器。分隔符文档是here。例如,在解码器管道中添加以下内容。

pipeline.addLast("framer", new DelimiterBasedFrameDecoder(8192, Delimiters.nulDelimiter()));
编码时应使用

,例如

@Sharable
public class NulEncoder extends OneToOneEncoder {

@Override
protected Object encode(ChannelHandlerContext ctx, Channel channel,
        Object msg) throws Exception {
    ChannelBuffer buffer = ChannelBuffers.wrappedBuffer((ChannelBuffer)msg, Delimiters.nulDelimiter());
    return buffer;
}
}