code: public AppendObjectResponse appendObject(
              String bucketName, String key, byte[] value, ObjectMetadata metadata) {
          checkNotNull(metadata, "metadata should not be null.");
          if (metadata.getContentLength() == -1) {
              metadata.setContentLength(value.length);
          }
          return this.appendObject(
                  new AppendObjectRequest(bucketName, key, RestartableInputStream.wrap(value), metadata));
      }
docs: Uploads the appendable bytes and object metadata to Bos under the specified bucket and key name.
  
  @param bucketName The name of an existing bucket, to which you have Write permission.
  @param key The key under which to store the specified file.
  @param value The bytes containing the value to be uploaded to Bos.
  @param metadata Additional metadata instructing Bos how to handle the uploaded data
  (e.g. custom user metadata, hooks for specifying content type, etc.).
  @return An AppendObjectResponse object containing the information returned by Bos for the newly created object.