我正在研究一种使用DelimiterBasedFrameDecoder进行解码的协议,只要收到换行符就会拆分bytebuf。
不幸的是,必须有可能使用换行符传输字符串。到目前为止,解码器读取字符串中的换行符并相应地创建帧。
我的想法是使用Base64对这些字符串进行编码,并在framedecoder完成其工作后对其进行解码。我现在的问题是,这个问题有更好的解决方案吗? Base64带来了开销以及额外的编码/解码工作。
使用另一个分隔符是不可能的,因为我需要它用于我的协议的头字段。
答案 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;
}
}