code: public CompositeByteBuf removeComponents(int cIndex, int numComponents) {
          checkComponentIndex(cIndex, numComponents);
  
          if (numComponents == 0) {
              return this;
          }
          int endIndex = cIndex + numComponents;
          boolean needsUpdate = false;
          for (int i = cIndex; i < endIndex; ++i) {
              Component c = components[i];
              if (c.length() > 0) {
                  needsUpdate = true;
              }
              if (lastAccessed == c) {
                  lastAccessed = null;
              }
              c.free();
          }
          removeCompRange(cIndex, endIndex);
  
          if (needsUpdate) {
              // Only need to call updateComponentOffsets if the length was > 0
              updateComponentOffsets(cIndex);
          }
          return this;
      }
docs: Remove the number of {@link ByteBuf}s starting from the given index.
  
  @param cIndex the index on which the {@link ByteBuf}s will be started to removed
  @param numComponents the number of components to remove