docs: static public WsByteBuffer[] putByteArray(WsByteBuffer[] buffers, byte[] value, int inOffset, int length, BNFHeadersImpl bnfObj) {
          // LIDB2356-41: byte[]/offset/length support
          if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
              // verify the input buffer information
              if (null == buffers) {
                  if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                      Tr.debug(tc, "Null buffers sent to putByteArray");
                  }
                  return null;
              }
              // verify the input value information
              if (null == value || 0 == value.length) {
                  if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                      Tr.debug(tc, "Empty value provided to putByteArray: " + value);
                  }
                  // return no changes
                  return buffers;
              }
          }
  
          int offset = inOffset;
          WsByteBuffer buffer = buffers[buffers.length - 1];
          try {
              buffer.put(value, offset, length);
          } catch (BufferOverflowException boe) {
              // no FFDC required
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                  Tr.debug(tc, "putByteArray overflow: " + buffer);
              }
  
              // put what we can and get more space
              // available data in current buffer
              int avail = buffer.capacity() - buffer.position();
              buffer.put(value, offset, avail);
              buffer.flip();
              offset += avail;
              int remaining = length - offset;
              int numBuffers = (remaining / bnfObj.getOutgoingBufferSize());
              // see if there are "leftover" bytes that need another buffer
              if (0 != (remaining % bnfObj.getOutgoingBufferSize())) {
                  numBuffers++;
              }
              // allocate new buffers and put data in as we go along
              WsByteBuffer[] newBuffers = new WsByteBuffer[numBuffers];
              for (int i = 0; i < numBuffers; i++) {
                  newBuffers[i] = bnfObj.allocateBuffer(bnfObj.getOutgoingBufferSize());
                  avail = newBuffers[i].capacity();
                  // if the available space is enough for the rest of the data,
                  // add it and we're done
                  if (remaining <= avail) {
                      newBuffers[i].put(value, offset, remaining);
                      break;
                  }
                  // if it's not, then we need to put what we can and then
                  // expand the buffer[]
                  newBuffers[i].put(value, offset, avail);
                  newBuffers[i].flip();
  
                  offset += avail;
                  remaining -= avail;
              }
  
              return WsByteBufferUtils.expandBufferArray(buffers, newBuffers);
          }
  
          return buffers;
      }