public BucketIterator(String bucket, S3Downloader s3) {
    this.bucket = bucket;

    if (s3 == null) s3 = new S3Downloader();
    currList = s3.listObjects(bucket);
    currObjects = currList.getObjectSummaries();
  }
  @Override
  public InputStream next() {
    if (currObject < currObjects.size()) {
      InputStream ret = s3.objectForKey(bucket, currObjects.get(currObject).getKey());
      currObject++;
      return ret;
    } else if (currList.isTruncated()) {
      currList = s3.nextList(currList);
      currObjects = currList.getObjectSummaries();
      currObject = 0;

      InputStream ret = s3.objectForKey(bucket, currObjects.get(currObject).getKey());

      currObject++;
      return ret;
    }

    return null;
  }