查看本类的 API文档回源码主页即时通讯网 - 即时通讯开发者社区!
1   /*
2    * Copyright 2012 The Netty Project
3    *
4    * The Netty Project licenses this file to you under the Apache License,
5    * version 2.0 (the "License"); you may not use this file except in compliance
6    * with the License. You may obtain a copy of the License at:
7    *
8    *   http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12   * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13   * License for the specific language governing permissions and limitations
14   * under the License.
15   */
16  package io.netty.channel;
17  
18  import io.netty.buffer.ByteBuf;
19  import io.netty.buffer.ByteBufAllocator;
20  
21  /**
22   * Allocates a new receive buffer whose capacity is probably large enough to read all inbound data and small enough
23   * not to waste its space.
24   */
25  public interface RecvByteBufAllocator {
26  
27      /**
28       * Creates a new handle.  The handle provides the actual operations and keeps the internal information which is
29       * required for predicting an optimal buffer capacity.
30       */
31      Handle newHandle();
32  
33      interface Handle {
34          /**
35           * Creates a new receive buffer whose capacity is probably large enough to read all inbound data and small
36           * enough not to waste its space.
37           */
38          ByteBuf allocate(ByteBufAllocator alloc);
39  
40          /**
41           * Similar to {@link #allocate(ByteBufAllocator)} except that it does not allocate anything but just tells the
42           * capacity.
43           */
44          int guess();
45  
46          /**
47           * Records the the actual number of read bytes in the previous read operation so that the allocator allocates
48           * the buffer with potentially more correct capacity.
49           *
50           * @param actualReadBytes the actual number of read bytes in the previous read operation
51           */
52          void record(int actualReadBytes);
53      }
54  }