У меня есть очень большой файл (несколько ГБ) в AWS S3, и мне нужно только небольшое количество строк в файле, которые удовлетворяют определенному условию. Я не хочу загружать весь файл в память, а затем искать и печатать эти несколько строк - нагрузка на память для этого будет слишком высокой. Правильным способом было бы загружать в память только те строки, которые необходимы.
Согласно документации AWS для чтения из файла:
fullObject = s3Client.getObject(new GetObjectRequest(bucketName, key));
displayTextInputStream(fullObject.getObjectContent());
private static void displayTextInputStream(InputStream input) throws IOException {
// Read the text input stream one line at a time and display each line.
BufferedReader reader = new BufferedReader(new InputStreamReader(input));
String line = null;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
System.out.println();
}
Здесь мы используем BufferedReader. Мне непонятно, что здесь происходит внизу.
Делаем ли мы сетевой вызов S3 каждый раз, когда читаем новую строку, и сохраняем ли в буфере только текущую строку? Или весь файл загружается в память, а затем считывается BufferedReader построчно? Или это где-то посередине?