code: protected WsByteBuffer[] putBytes(byte[] data, WsByteBuffer[] inBuffers) {
          WsByteBuffer[] buffers = inBuffers;
          int space_left = this.byteCacheSize - this.bytePosition;
          if (data.length <= space_left) {
              // put it into the byte cache
              System.arraycopy(data, 0, this.byteCache, this.bytePosition, data.length);
              this.bytePosition += data.length;
          } else {
              // doesn't fit entirely, empty the cache and then the data to buffer
              buffers = flushCache(buffers);
              return GenericUtils.putByteArray(buffers, data, 0, data.length, this);
          }
  
          if (this.bytePosition == this.byteCacheSize) {
              // full cache, flush it
              buffers = flushFullCache(buffers);
          }
          return buffers;
      }
docs: Place the input information into the outgoing cache. If the cache is
  full, then it will be flushed out into the input buffers. The list of
  buffers is returned back to the caller as they may have been changed
  (extended) when the cache was flushed.
  
  @param data
  @param inBuffers
  @return WsByteBuffer[]