没有" \ n"发送字符串在Netty

时间:2015-07-06 19:40:57

标签: java sockets netty

我有一个用netty.io编写的简单套接字客户端,对于数据发送和接收,我使用SimpleChannelInboundHandler。在Initializer类我定义了这个:

pipeline.addLast("framer", new DelimiterBasedFrameDecoder(8192, Delimiters.lineDelimiter()));

但是这样我每次都需要放置" \ n"字符串末尾的新行符号,我不需要。没有此符号,我无法发送或接收任何字符串数据。什么是解决方案使用netty中的字符串数据而没有新的行分隔符?

1 个答案:

答案 0 :(得分:1)

您可以指定您喜欢的分隔符,例如

ByteBuf[] delimiters = new ByteBuf[] {
    Unpooled.wrappedBuffer(new byte[] { '\r', '\n' }), // WINDOWS
    Unpooled.wrappedBuffer(new byte[] { '\n' }),       // UNIX / OSX
    Unpooled.wrappedBuffer(new byte[] { '\r' })        // LEGACY MAC
};
pipeline.addLast("framer", new DelimiterBasedFrameDecoder(MAXFRAMELENGTH, delimiters));

通过这种方式,如果省略它,你可以摆脱\n并替换为另一个角色。

如果您想省略任何分隔符,我认为您可以使用FixedLengthFrameDecoderpipeline.addLast("framer", new FixedLengthFrameDecoder(yourFrameLength));LengthFieldBasedFrameDecoder以获得更多选项。