2017-08-10 3 views
3

est ici l'avertissement que je reçois:AmazonS3: Avertissement Obtenir: S3AbortableInputStream: tous les octets ont été lus à partir du S3ObjectInputStream, abandon connexion HTTP

S3AbortableInputStream: tous les octets ont été lus à partir du S3ObjectInputStream, abandon connexion HTTP . Ceci est probablement une erreur et peut entraîner un comportement sous-optimal. Ne demandez que les octets dont vous avez besoin via un GET à distance ou vidangez le flux d'entrée après utilisation.

J'ai essayé d'utiliser try avec des ressources mais S3ObjectInputStream ne semble pas se fermer via cette méthode.

try (S3Object s3object = s3Client.getObject(new GetObjectRequest(bucket, key)); 
     S3ObjectInputStream s3ObjectInputStream = s3object.getObjectContent(); 
     BufferedReader reader = new BufferedReader(new InputStreamReader(s3ObjectInputStream, StandardCharsets.UTF_8)); 
    ){ 
    //some code here blah blah blah 
} 

J'ai aussi essayé ci-dessous le code et la fermeture de façon explicite, mais cela ne fonctionne pas non plus:

S3Object s3object = s3Client.getObject(new GetObjectRequest(bucket, key)); 
S3ObjectInputStream s3ObjectInputStream = s3object.getObjectContent(); 

try (BufferedReader reader = new BufferedReader(new InputStreamReader(s3ObjectInputStream, StandardCharsets.UTF_8)); 
){ 
    //some code here blah blah 
    s3ObjectInputStream.close(); 
    s3object.close(); 
} 

Toute aide serait appréciée. PS: Je ne lis que deux lignes du fichier à partir de S3 et le fichier contient plus de données.

Répondre

5

Vous avez obtenu la réponse via un autre support. Le partager ici:

L'avertissement indique que vous avez appelé close() sans lire le fichier entier. Ceci est problématique car S3 essaie toujours d'envoyer les données et vous laissez la connexion dans un état triste.

Il y a deux options:

  1. Lire la suite des données du flux d'entrée de sorte que la connexion peut être réutilisée.
  2. Appelez s3ObjectInputStream.abort() pour fermer la connexion sans lire les données. La connexion ne sera pas réutilisée, vous devrez donc effectuer un certain nombre de modifications à la prochaine demande pour recréer la connexion. Cela peut en valoir la peine si cela prend du temps pour lire le reste du fichier.
+0

Que voulez-vous dire par - "la connexion peut être réutilisée"? Je pensais qu'une connexion HTTP est créée pour chaque requête S3 GET – ares