我正在尝试将多个S3对象异步地拉到内存中。
对于单个对象,我可以使用AmazonS3
s3Object = s3Client.getObject(bucketName, String key)
S3ObjectInputStream stream = s3Object.getObjectContent();
byte[] byteArray IOUtils.toByteArray(s3InputStream);
stream.close()对于目录下载中的对象,亚马逊网络服务提供了TransferManager,但问题是我不希望它写入文件/磁盘。我希望所有对象都在内存中返回给我。
如何实现一次从S3异步拉取多个对象并将其返回到内存中?
发布于 2020-06-03 02:30:02
我自己还没有用Java语言做到这一点,但理论上你应该可以通过使用CompletableFuture来实现这一点。
本文档中的第二个示例展示了如何从S3:Asynchronous Programming异步获取一个对象。要获得字节数组形式的对象,而不是文件形式,需要用AsyncResponseTransformer.toBytes替换AsyncResponseTransformer.toFile。
然后,您需要对要加载的每个文件执行此操作,然后使用CompletableFuture.allOf()等待所有CompletableFuture完成文件加载。
https://stackoverflow.com/questions/62157090
复制相似问题