code: private void copyInternal(
        BatchHelper batchHelper,
        final KeySetView<IOException, Boolean> innerExceptions,
        final String srcBucketName, final String srcObjectName,
        final String dstBucketName, final String dstObjectName)
        throws IOException {
      Storage.Objects.Copy copyObject =
          configureRequest(
              gcs.objects().copy(srcBucketName, srcObjectName, dstBucketName, dstObjectName, null),
              srcBucketName);
  
      batchHelper.queue(
          copyObject,
          new JsonBatchCallback<StorageObject>() {
            @Override
            public void onSuccess(StorageObject copyResponse, HttpHeaders responseHeaders) {
              String srcString = StorageResourceId.createReadableString(srcBucketName, srcObjectName);
              String dstString = StorageResourceId.createReadableString(dstBucketName, dstObjectName);
              logger.atFine().log("Successfully copied %s to %s", srcString, dstString);
            }
  
            @Override
            public void onFailure(GoogleJsonError e, HttpHeaders responseHeaders) {
              onCopyFailure(innerExceptions, e, srcBucketName, srcObjectName);
            }
          });
    }
docs: Performs copy operation using GCS Copy requests
  
  @see GoogleCloudStorage#copy(String, List, String, List)