docs: @Override
      protected void validateIndex(int index, int bytesRequested) throws IOException
      {
          if (index < 0) {
              throw new BufferBoundsException(String.format("Attempt to read from buffer using a negative index (%d)", index));
          } else if (bytesRequested < 0) {
              throw new BufferBoundsException("Number of requested bytes must be zero or greater");
          } else if ((long)index + bytesRequested - 1 > Integer.MAX_VALUE) {
              throw new BufferBoundsException(String.format("Number of requested bytes summed with starting index exceed maximum range of signed 32 bit integers (requested index: %d, requested count: %d)", index, bytesRequested));
          }
  
          if (!isValidIndex(index, bytesRequested)) {
              assert(_isStreamFinished);
              // TODO test that can continue using an instance of this type after this exception
              throw new BufferBoundsException(index, bytesRequested, _streamLength);
          }
      }