docs: private boolean extractInitialValue() {
          if (-1 == this.buffIndex) {
              // parsing information not set yet, this should not happen
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                  Tr.debug(tc, "Extract: -1 index");
              }
              return false;
          }
  
          this.bValue = new byte[this.valueLength];
          WsByteBuffer buff = this.myOwner.getParseBuffer(this.buffIndex);
          int savePosition = buff.position();
          // assume all of the data is in the first buffer, and only do the more
          // extensive logic if we need to
          try {
              buff.position(this.offset);
              buff.get(this.bValue, 0, this.valueLength);
              buff.position(savePosition);
  
          } catch (BufferUnderflowException bue) {
              // no FFDC required
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                  Tr.debug(tc, "Header value straddled buffers");
              }
              int lengthNeeded = this.valueLength;
              int arrayOffset = 0;
              // reset the first buffer for the read
              buff.position(this.offset);
              int spaceLeftInBuffer = buff.remaining();
              int index = this.buffIndex + 1;
  
              // loop until we break out below
              while (true) {
                  // reset the position in the buffer for the get() call below
                  if (lengthNeeded <= spaceLeftInBuffer) {
                      // get the rest of the data
                      buff.get(this.bValue, arrayOffset, lengthNeeded);
                      buff.position(savePosition);
                      // we're done
                      break;
                  }
                  // pull out the information from this particular buffer and
                  // set it up for querying the next buffer
                  buff.get(this.bValue, arrayOffset, spaceLeftInBuffer);
                  buff.position(savePosition);
                  lengthNeeded -= spaceLeftInBuffer;
                  arrayOffset += spaceLeftInBuffer;
                  buff = this.myOwner.getParseBuffer(index);
                  index++;
  
                  // secondary buffers... save the current position and reset to
                  // zero for the next read
                  savePosition = buff.position();
                  buff.position(0);
                  spaceLeftInBuffer = buff.limit();
              } // end of while
          } // end of catch block
  
          // once we've extracted, fix the length/offset stuff
          this.offset = 0;
          this.buffIndex = -1;
          if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
              this.sValue = GenericUtils.getEnglishString(this.bValue);
              Tr.debug(tc, "extractInitialValue parsed [" + getDebugValue() + "]");
          }
          return true;
      }