docs: protected boolean fillByteCache(WsByteBuffer buff) {
          if (this.bytePosition < this.byteLimit) {
              return false;
          }
  
          int size = buff.remaining();
          if (size > this.byteCacheSize) {
              // truncate to just fill up the cache
              size = this.byteCacheSize;
          }
          this.bytePosition = 0;
          this.byteLimit = size;
          if (0 == this.byteLimit) {
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                  Tr.debug(tc, "fillByteCache: no data");
              }
              return false;
          }
          if (HeaderStorage.NOTSET != this.headerChangeLimit && -1 != this.parseIndex
              && -1 == this.parseBuffersStartPos[this.parseIndex]) {
              // first occurrance of this buffer and we're keeping track of changes
              this.parseBuffersStartPos[this.parseIndex] = buff.position();
          }
          buff.get(this.byteCache, this.bytePosition, this.byteLimit);
  
          return true;
      }