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

Java Netty-使用换行符传输字符串的最佳方式?,java,netty,decode,encode,Java,Netty,Decode,Encode,我正在研究一种协议,该协议使用DelimiterBaseFrameDecoder进行解码,每当接收到换行符时,就会分割bytebuf 不幸的是,必须有可能传输带有换行符的字符串。现在,解码器读取字符串中的换行符,并相应地创建帧 我的想法是使用Base64对这些字符串进行编码,并在framedecoder完成工作后对其进行解码。我现在的问题是,有没有更好的办法解决这个问题?Base64带来了开销以及额外的编码/解码工作 无法使用另一个定界符,因为我需要它作为协议的标题字段。在管道中使用基于定界符的

我正在研究一种协议,该协议使用DelimiterBaseFrameDecoder进行解码,每当接收到换行符时,就会分割bytebuf

不幸的是,必须有可能传输带有换行符的字符串。现在,解码器读取字符串中的换行符,并相应地创建帧

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


无法使用另一个定界符,因为我需要它作为协议的标题字段。

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

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;
}
}

嘿,谢谢你的回答!与此同时,我想出了另一个解决办法。当我收到一个请求/响应的整个报头时,我只是从管道中删除了帧解码器,并添加了一个,如下所示:解码器不会分割每一个换行符,它现在会在接收到新帧解码器长度的字节数时进行分割。是的,如果您正在传输二进制文件,这是一个很好的方法。如果您正在传输字符串,那么NUL可能是更好的方式。