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
        }
    }
  • 相关阅读:
    实用机器学习 跟李沐学AI
    Explicitly drop temp table or let SQL Server handle it
    dotnettransformxdt and FatAntelope
    QQ拼音输入法 禁用模糊音
    (技术八卦)Java VS RoR
    Ruby on rails开发从头来(windows)(七)创建在线购物页面
    Ruby on rails开发从头来(windows)(十三)订单(Order)
    Ruby on rails开发从头来(windows)(十一)订单(Order)
    新员工自缢身亡,华为又站到了风口浪尖
    死亡汽油弹(Napalm Death)乐队的视频和来中国演出的消息
  • 原文地址:https://www.cnblogs.com/sherrykid/p/6036538.html
Copyright © 2011-2022 走看看