code: @Nonnegative
    private static long _channelCopy1 (@Nonnull @WillNotClose final ReadableByteChannel aSrc,
                                       @Nonnull @WillNotClose final WritableByteChannel aDest) throws IOException
    {
      long nBytesWritten = 0;
      final ByteBuffer aBuffer = ByteBuffer.allocateDirect (16 * 1024);
      while (aSrc.read (aBuffer) != -1)
      {
        // Prepare the buffer to be drained
        aBuffer.flip ();
  
        // Write to the channel; may block
        nBytesWritten += aDest.write (aBuffer);
  
        // If partial transfer, shift remainder down
        // If buffer is empty, same as doing clear()
        aBuffer.compact ();
      }
  
      // EOF will leave buffer in fill state
      aBuffer.flip ();
  
      // Make sure that the buffer is fully drained
      while (aBuffer.hasRemaining ())
        nBytesWritten += aDest.write (aBuffer);
  
      return nBytesWritten;
    }
docs: Channel copy method 1. This method copies data from the src channel and
  writes it to the dest channel until EOF on src. This implementation makes
  use of compact( ) on the temp buffer to pack down the data if the buffer
  wasn't fully drained. This may result in data copying, but minimizes system
  calls. It also requires a cleanup loop to make sure all the data gets sent.
  <br>
  Source: Java NIO, page 60
  
  @param aSrc
  Source channel. May not be <code>null</code>. Is not closed after
  the operation.
  @param aDest
  Destination channel. May not be <code>null</code>. Is not closed
  after the operation.
  @return The number of bytes written.