docs: public InputStream getObject(String bucketName, String objectName, long offset, Long length)
      throws InvalidBucketNameException, NoSuchAlgorithmException, InsufficientDataException, IOException,
             InvalidKeyException, NoResponseException, XmlPullParserException, ErrorResponseException,
             InternalException,
             InvalidArgumentException {
      if ((bucketName == null) || (bucketName.isEmpty())) {
        throw new InvalidArgumentException("bucket name cannot be empty");
      }
  
      if ((objectName == null) || (objectName.isEmpty())) {
        throw new InvalidArgumentException("object name cannot be empty");
      }
  
      if (offset < 0) {
        throw new InvalidArgumentException("offset should be zero or greater");
      }
  
      if (length != null && length <= 0) {
        throw new InvalidArgumentException("length should be greater than zero");
      }
  
      Map<String,String> headerMap = new HashMap<>();
      if (length != null) {
        headerMap.put("Range", "bytes=" + offset + "-" + (offset + length - 1));
      } else if (offset > 0) {
        headerMap.put("Range", "bytes=" + offset + "-");
      }
  
      HttpResponse response = executeGet(bucketName, objectName, headerMap, null);
      return response.body().byteStream();
    }