Как я могу перебрать большое количество файлов из S3, распаковать каждый из них и передать их как Stream? - PullRequest
0 голосов
/ 05 февраля 2020

Так что в настоящее время мой код перебирает огромное количество файлов (.nd json .gzip). Во время итерации каждый файл преобразовывался в строку, а эта строка вставлялась в хэш-набор.

Первоначально моей идеей было потоковое воспроизведение всех файлов, чтобы конечный пользователь мог манипулировать этим потоком по своему усмотрению. Кроме того, это огромный кусок данных, поэтому я буду гораздо быстрее передавать все файлы один за другим.

1.Как я могу реализовать свою идею?

2. Например, как я могу вернуть из функции (getAllFiles ()) поток, чтобы я мог напечатать содержимое?

public class ServiceGzipped {
  HashSet<String> getAllFiles() throws IOException {
    HashSet<String> hashSet = new HashSet<>();

    ListObjectsV2Request request = new ListObjectsV2Request().withBucketName("some-bucket-name").withPrefix("some-prefix");
    ListObjectsV2Result result;


    do {
        result = client.listObjectsV2(request);

        for (S3ObjectSummary summary : result.getObjectSummaries()) {
            System.out.println(summary.getKey() + " : " + summary.getSize());
            String s = downloadFromAWS(summary.getKey());
            hashSet.add(s);
        }

        String token = result.getNextContinuationToken();
        System.out.println(token);
        request.setContinuationToken(token);
    } while (result.isTruncated());

    return hashSet ;
}



String downloadFromAWS(String file) {
    S3Object s3Object = client.getObject(bucketName, file);
    String output = "";

    try {
        GZIPInputStream gzipInputStream= new GZIPInputStream(s3Object.getObjectContent());

        InputStreamReader reader = new InputStreamReader(gzipInputStream);
        BufferedReader in = new BufferedReader(reader);
        String readed;
        while ((readed = in.readLine())!= null){
            System.out.println(readed);
            output +=readed;
        }

        return output;
    }catch (Exception e){
        System.out.println(e);
    }
    return null;
}

Заранее спасибо за помощь:)

...