code: @DoesServiceRequest
      private synchronized void writeInternal(final byte[] data, int offset, int length) throws IOException {
          while (length > 0) {
              this.checkStreamState();
  
              final int availableBufferBytes = this.internalWriteThreshold - this.currentBufferedBytes;
              final int nextWrite = Math.min(availableBufferBytes, length);
  
              // If we need to set MD5 then update the digest accordingly
              if (this.options.getStoreFileContentMD5()) {
                  this.md5Digest.update(data, offset, nextWrite);
              }
  
              this.outBuffer.write(data, offset, nextWrite);
              this.currentBufferedBytes += nextWrite;
              offset += nextWrite;
              length -= nextWrite;
  
              if (this.currentBufferedBytes == this.internalWriteThreshold) {
                  this.dispatchWrite(this.internalWriteThreshold);
              }
          }
      }
docs: Writes the data to the buffer and triggers writes to the service as needed.
  
  @param data
  A <code>byte</code> array which represents the data to write.
  @param offset
  An <code>int</code> which represents the start offset in the data.
  @param length
  An <code>int</code> which represents the number of bytes to write.
  
  @throws IOException
  If an I/O error occurs. In particular, an IOException may be thrown if the output stream has been
  closed.