code: static public WsByteBuffer[] putByte(WsByteBuffer[] buffers, byte value, BNFHeadersImpl bnfObj) {
  
          // verify input buffer information
          if (null == buffers) {
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                  Tr.debug(tc, "Null buffers sent to putByte");
              }
              return null;
          }
  
          // get the last buffer
          WsByteBuffer buffer = buffers[buffers.length - 1];
          try {
              buffer.put(value);
          } catch (BufferOverflowException boe) {
              // no FFDC required
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                  Tr.debug(tc, "putByte overflow: " + buffer);
              }
  
              // allocate another buffer and put the byte into it
              buffer.flip();
              buffer = bnfObj.allocateBuffer(bnfObj.getOutgoingBufferSize());
              buffer.put(value);
              return WsByteBufferUtils.expandBufferArray(buffers, buffer);
          }
          return buffers;
      }
docs: Given a wsbb[], we're adding a byte value to the <b>last</b> buffer. If
  that buffer fills up, then we will allocate a new one, by expanding
  the last WsByteBuffer in wsbb[].
  <p>
  Returns the new wsbb[] (expanded if needed).
  
  @param buffers
  @param value
  @param bnfObj
  @return WsByteBuffer[]