docs: public static long copy(ReadableByteChannel in, WritableByteChannel out, int bufferSize, StreamProgress streamProgress) throws IORuntimeException {
  		Assert.notNull(in, "InputStream is null !");
  		Assert.notNull(out, "OutputStream is null !");
  
  		ByteBuffer byteBuffer = ByteBuffer.allocate(bufferSize <= 0 ? DEFAULT_BUFFER_SIZE : bufferSize);
  		long size = 0;
  		if (null != streamProgress) {
  			streamProgress.start();
  		}
  		try {
  			while (in.read(byteBuffer) != EOF) {
  				byteBuffer.flip();// 写转读
  				size += out.write(byteBuffer);
  				byteBuffer.clear();
  				if (null != streamProgress) {
  					streamProgress.progress(size);
  				}
  			}
  		} catch (IOException e) {
  			throw new IORuntimeException(e);
  		}
  		if (null != streamProgress) {
  			streamProgress.finish();
  		}
  
  		return size;
  	}