Чтение N байтов из файла AWS s3 не читает N байтов - PullRequest
1 голос
/ 28 февраля 2020

Я пытаюсь прочитать N байтов из моего файла в AWS S3 bucket и записать его в буфер, однако, когда я пытаюсь это сделать, возвращаемое количество байтов не N, но намного меньше и после многократного вызова это отличается.

Что я делаю, это:

public int readData(byte[] data, int doff, long offset, int length, String bucketName, String fileName) throws IOException {
    GetObjectRequest rangeObjectRequest = new GetObjectRequest(bucketName, fileName)
            .withRange(offset, length);

    S3Object objectPortion = S3_CLIENT.getObject(rangeObjectRequest);

    return objectPortion.getObjectContent().read(data, doff, length);
}

, когда offset = 0 и length = 32752

objectPortion.getObjectContent().read(data, doff, length);

возвращает 16360 в то время как data размер составляет 32820, что достаточно для всех данных, которые я хочу.

Почему это происходит? Почему он не возвращает все данные?

Размер файла, который я пытаюсь загрузить, составляет около 69 КБ

1 Ответ

0 голосов
/ 02 марта 2020

Используйте этот фрагмент, чтобы прочитать весь контент:

try (S3ObjectInputStream is = objectPortion.getObjectContent()) {
    byte[] buf = new byte[4096];
    int read = 0;

    while ((read = is.read(buf)) >= 0) {
        // use buf / read values
    }
} catch (Exception e) {
    …
}
...