Вы, вероятно, уже решили эту проблему, но я не смог найти правильный ответ и в итоге выяснил его сам, поэтому вот решение:
Документация по методам getObjectContent очень четко описывает закрытие InputStream:
S3ObjectInputStream com.amazonaws.services.s3.model.S3Object.getObjectContent ()
Получает входной поток, содержащий содержимое этого объекта.Вызывающие абоненты должны закрыть этот входной поток как можно скорее, потому что содержимое объекта не буферизуется в памяти и не передается напрямую из Amazon S3.
Вы делаете ту же ошибку, что и я, используя InputStream (S3Object), как если бы замыкание было прозрачным.
Я предполагаю, что вам нужно получить изображение из S3, чтобы оно былоиспользуется на Android, поэтому здесь идет пример метода, который возвращает растровое изображение.Это действительно относится к любому виду ввода.
private Bitmap getFromStore(String fileName) {
AmazonS3Client client = new AmazonS3Client(new BasicAWSCredentials(ACCESS_KEY, SECRET_KEY));
S3Object o = client.getObject(BUCKET, fileName);
InputStream is = o.getObjectContent();
Bitmap image = null;
try {
// Use the inputStream and close it after.
image = BitmapFactory.decodeStream(is);
} finally {
try {
is.close();
} catch (IOException e) {
Log.w(TAG, "Error trying to close image stream. ", e);
}
}
return image;
}
На всякий случай не забудьте выполнить это в другом потоке, отличном от пользовательского интерфейса.
Удачи,