docs: public static long copy(InputStream in, OutputStream out, int bufferSize, StreamProgress streamProgress) throws IORuntimeException {
  		Assert.notNull(in, "InputStream is null !");
  		Assert.notNull(out, "OutputStream is null !");
  		if (bufferSize <= 0) {
  			bufferSize = DEFAULT_BUFFER_SIZE;
  		}
  
  		byte[] buffer = new byte[bufferSize];
  		if (null != streamProgress) {
  			streamProgress.start();
  		}
  		long size = 0;
  		try {
  			for (int readSize = -1; (readSize = in.read(buffer)) != EOF;) {
  				out.write(buffer, 0, readSize);
  				size += readSize;
  				out.flush();
  				if (null != streamProgress) {
  					streamProgress.progress(size);
  				}
  			}
  		} catch (IOException e) {
  			throw new IORuntimeException(e);
  		}
  		if (null != streamProgress) {
  			streamProgress.finish();
  		}
  		return size;
  	}