【问题标题】:How to get multiple S3 objects asynchronously into memory如何将多个 S3 对象异步放入内存
【发布时间】:2020-09-21 05:19:27
【问题描述】:

我正在尝试将多个 S3 对象异步拉入内存。

对于单个对象,我可以使用AmazonS3

s3Object = s3Client.getObject(bucketName, String key)
S3ObjectInputStream stream = s3Object.getObjectContent();
byte[] byteArray  IOUtils.toByteArray(s3InputStream);
stream.close()

对于目录下载中的对象,AWS 提供TransferManager,但问题是我不希望它写入文件/磁盘。我希望所有对象都在内存中归还给我。

如何实现一次从 S3 异步拉取多个对象并将其返回到内存中?

【问题讨论】:

    标签: java amazon-web-services amazon-s3 aws-sdk


    【解决方案1】:

    我自己还没用 Java 做过,但理论上你应该可以通过使用 CompletableFuture 来实现。

    此 AWS 文档中的第二个示例展示了如何从 S3 异步获取一个对象:Asynchronous Programming。要将对象作为字节数组而不是文件获取,您需要将 AsyncResponseTransformer.toFile 替换为 AsyncResponseTransformer.toBytes

    然后,您需要对要加载的每个文件都执行此操作,然后使用 CompletableFuture.allOf() 等待所有 CompletableFutures 完成文件加载。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-09-26
      • 2014-08-19
      • 1970-01-01
      • 1970-01-01
      • 2018-04-27
      • 2023-03-05
      • 1970-01-01
      相关资源
      最近更新 更多