docs: @Override
      public int available() throws IOException {
          validate();
          int rc = 0;
          if (null != this.buffer) {
              rc = this.buffer.remaining();
          } else {
              if (!enableMultiReadofPostData) {
                  rc = 0;
              } else {
                  // read the stored buffer(s) and return what all can be read in non-blocking way
                  int localIndex = postDataIndex;
                  WsByteBuffer localBuffer = null;
                  if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                      Tr.debug(tc, "available ,index ->" + postDataIndex + " ,storage.size ->" + postDataBuffer.size());
                  }
  
                  while (postDataBuffer.size() > localIndex) {
                      localBuffer = postDataBuffer.get(localIndex);
                      if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                          Tr.debug(tc, "available " + this + ", local position ->" + localBuffer.position());
                      }
                      if (null != localBuffer) {
                          localIndex++;
                          rc += localBuffer.remaining();
                      }
                  }
                  localBuffer = null;
              }
          }
          if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
              Tr.debug(tc, "available: " + rc);
          }
          return rc;
      }