Так что в настоящее время мой код перебирает огромное количество файлов (.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;
}
Заранее спасибо за помощь:)