zoukankan      html  css  js  c++  java
  • 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[] { '
    ', '
    ' }),
                    Unpooled.wrappedBuffer(new byte[] { '
    ' }),
            };

    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 ('
    ')} and {@code LF ('
    ')} delimiters, which could
         * be used for text-based line protocols.
         */
        public static ByteBuf[] lineDelimiter() {
            return new ByteBuf[] {
                    Unpooled.wrappedBuffer(new byte[] { '
    ', '
    ' }),
                    Unpooled.wrappedBuffer(new byte[] { '
    ' }),
            };
        }
    
        private Delimiters() {
            // Unused
        }
    }
  • 相关阅读:
    methodForSelector
    判定一个点P是否存在于指定的三角形ABC内
    xcode error failed to launch no such file or directory
    【转】SQLServer系统变量使用
    【转】SQL SERVER中查询某个表或某个索引是否存在
    wtforms
    Flask上下文管理、session原理和全局g对象
    Oldboy s4 Flask
    批处理删除文件夹下所有文件和文件夹
    autojs使用
  • 原文地址:https://www.cnblogs.com/sherrykid/p/6036538.html
Copyright © 2011-2022 走看看