这是我得到的警告:



我尝试对资源使用try,但S3ObjectInputStream似乎无法通过此方法关闭。

 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
 }

我还尝试了下面的代码并显式关闭,但这也不起作用:
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();
}

任何帮助,将不胜感激。

PS:我只从S3中读取文件的两行,并且文件中包含更多数据。

最佳答案

通过其他媒介得到了答案。在这里分享:

该警告表明您调用了close()而不读取整个文件。这是有问题的,因为S3仍在尝试发送数据,并且您使连接处于悲哀状态。

这里有两个选择:

  • 从输入流中读取其余数据,以便可以重新使用连接。
  • 调用s3ObjectInputStream.abort()关闭连接而不读取数据。连接将不会被重用,因此在下一个重新创建连接的请求中,您的性能会受到影响。如果要花很长时间读取文件的其余部分,这可能是值得的。
  • 10-04 10:05