View Javadoc
1   /*
2    * Copyright 2015 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    *   https://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.netty5.channel;
17  
18  import java.util.Map.Entry;
19  
20  /**
21   * {@link RecvBufferAllocator} that limits a read operation based upon a maximum value per individual read
22   * and a maximum amount when a read operation is attempted by the event loop.
23   */
24  public interface MaxBytesRecvBufferAllocator extends RecvBufferAllocator {
25      /**
26       * Returns the maximum number of bytes to read per read loop.
27       * a {@link ChannelHandler#channelRead(ChannelHandlerContext, Object) channelRead()} event.
28       * If this value is greater than 1, an event loop might attempt to read multiple times to procure bytes.
29       */
30      int maxBytesPerRead();
31  
32      /**
33       * Sets the maximum number of bytes to read per read loop.
34       * If this value is greater than 1, an event loop might attempt to read multiple times to procure bytes.
35       */
36      MaxBytesRecvBufferAllocator maxBytesPerRead(int maxBytesPerRead);
37  
38      /**
39       * Returns the maximum number of bytes to read per individual read operation.
40       * a {@link ChannelHandler#channelRead(ChannelHandlerContext, Object) channelRead()} event.
41       * If this value is greater than 1, an event loop might attempt to read multiple times to procure bytes.
42       */
43      int maxBytesPerIndividualRead();
44  
45      /**
46       * Sets the maximum number of bytes to read per individual read operation.
47       * If this value is greater than 1, an event loop might attempt to read multiple times to procure bytes.
48       */
49      MaxBytesRecvBufferAllocator maxBytesPerIndividualRead(int maxBytesPerIndividualRead);
50  
51      /**
52       * Atomic way to get the maximum number of bytes to read for a read loop and per individual read operation.
53       * If this value is greater than 1, an event loop might attempt to read multiple times to procure bytes.
54       * @return The Key is from {@link #maxBytesPerRead()}. The Value is from {@link #maxBytesPerIndividualRead()}
55       */
56      Entry<Integer, Integer> maxBytesPerReadPair();
57  
58      /**
59       * Sets the maximum number of bytes to read for a read loop and per individual read operation.
60       * If this value is greater than 1, an event loop might attempt to read multiple times to procure bytes.
61       * @param maxBytesPerRead see {@link #maxBytesPerRead(int)}
62       * @param maxBytesPerIndividualRead see {@link #maxBytesPerIndividualRead(int)}
63       */
64      MaxBytesRecvBufferAllocator maxBytesPerReadPair(int maxBytesPerRead, int maxBytesPerIndividualRead);
65  }