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
        }
    }
  • 相关阅读:
    关于CSS单位:rem vh vw vmin vmax
    关于遍历一个数组的几种方法的比较
    关于ng的过滤器的详细解释angular-filter
    angular的路由跳转,的监听$rootScope.$on
    js经典校验之注册与登录校验
    CSS制作的32种图形效果[梯形|三角|椭圆|平行四边形|菱形|四分之一圆|旗帜]
    js的with语句使用方法
    js的DOM节点操作:创建 ,插入,删除,复制,查找节点
    js中的如何定位固定层的位置
    CommonJS、requirejs、ES6的对比
  • 原文地址:https://www.cnblogs.com/sherrykid/p/6036538.html
Copyright © 2011-2022 走看看