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
        }
    }
  • 相关阅读:
    基于接口的动态代理和基于子类的动态代理
    JDBC连接数据库
    关于使用Binlog和canal来对MySQL的数据写入进行监控
    使用VMware12在CentOS7上部署docker实例
    VMWare12pro安装Centos 6.9教程
    读《Java并发编程的艺术》学习笔记(十)
    读《Java并发编程的艺术》学习笔记(九)
    读《Java并发编程的艺术》学习笔记(八)
    读《Java并发编程的艺术》学习笔记(七)
    读《Java并发编程的艺术》学习笔记(六)
  • 原文地址:https://www.cnblogs.com/sherrykid/p/6036538.html
Copyright © 2011-2022 走看看