Netty指定分隔的字符
package org.zln.netty.five.part02; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import io.netty.channel.ChannelInitializer; import io.netty.channel.ChannelPipeline; import io.netty.channel.socket.SocketChannel; import io.netty.handler.codec.DelimiterBasedFrameDecoder; import io.netty.handler.codec.string.StringDecoder; /** * Created by sherry on 16/11/5. */ public class EchoServerInitializer extends ChannelInitializer<SocketChannel> { @Override protected void initChannel(SocketChannel socketChannel) throws Exception { //指定分隔符 ByteBuf delimiter = Unpooled.copiedBuffer("$_".getBytes("UTF-8")); ChannelPipeline pipeline = socketChannel.pipeline(); pipeline.addLast(new DelimiterBasedFrameDecoder(1024,delimiter)); pipeline.addLast(new StringDecoder()); pipeline.addLast(new EchoServerHandler()); } }
使用 DelimiterBasedFrameDecoder 解码器
通过
ByteBuf delimiter = Unpooled.copiedBuffer("$_".getBytes("UTF-8")) ;
构建了自定义的分隔符,在
pipeline.addLast(new DelimiterBasedFrameDecoder(1024,delimiter));
中传入
delimiter 也可以是一个数组
new ByteBuf[] { Unpooled.wrappedBuffer(new byte[] { '\r', '\n' }), Unpooled.wrappedBuffer(new byte[] { '\n' }), };
Netty提供了一个类,保存了常用的分隔符
/* * Copyright 2012 The Netty Project * * The Netty Project licenses this file to you under the Apache License, * version 2.0 (the "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at: * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations * under the License. */ package io.netty.handler.codec; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; /** * A set of commonly used delimiters for {@link DelimiterBasedFrameDecoder}. */ public final class Delimiters { /** * Returns a {@code NUL (0x00)} delimiter, which could be used for * Flash XML socket or any similar protocols. */ public static ByteBuf[] nulDelimiter() { return new ByteBuf[] { Unpooled.wrappedBuffer(new byte[] { 0 }) }; } /** * Returns {@code CR ('\r')} and {@code LF ('\n')} delimiters, which could * be used for text-based line protocols. */ public static ByteBuf[] lineDelimiter() { return new ByteBuf[] { Unpooled.wrappedBuffer(new byte[] { '\r', '\n' }), Unpooled.wrappedBuffer(new byte[] { '\n' }), }; } private Delimiters() { // Unused } }