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 }