我有一个用netty.io编写的简单套接字客户端,对于数据发送和接收,我使用SimpleChannelInboundHandler
。在Initializer类我定义了这个:
pipeline.addLast("framer", new DelimiterBasedFrameDecoder(8192, Delimiters.lineDelimiter()));
但是这样我每次都需要放置" \ n"字符串末尾的新行符号,我不需要。没有此符号,我无法发送或接收任何字符串数据。什么是解决方案使用netty中的字符串数据而没有新的行分隔符?
答案 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
并替换为另一个角色。
如果您想省略任何分隔符,我认为您可以使用FixedLengthFrameDecoder:
pipeline.addLast("framer", new FixedLengthFrameDecoder(yourFrameLength));
或LengthFieldBasedFrameDecoder以获得更多选项。