gpt4 book ai didi

java.io.IOException : Attempted read on closed stream on aws s3 bucket

转载 作者:行者123 更新时间:2023-11-30 06:12:08 25 4
gpt4 key购买 nike

我想使用 aws s3 存储桶和 java 来处理文件。

我的代码

AmazonS3 s3 = AmazonS3ClientBuilder.standard().build();
// Get the object from the event and show its content type
String srcBucket = event.getRecords().get(0).getS3().getBucket().getName();
String srcKey = event.getRecords().get(0).getS3().getObject().getKey();

S3Object s3Object = s3.getObject(new GetObjectRequest(srcBucket, srcKey));
audioInputStream = s3Object.getObjectContent();

processInputStreamMethod1(audioInputStream);

processInputStreamMethod2(audioInputStream);

显然我得到了

java.io.IOException: Attempted read on closed stream

处理这个问题的最佳方法(最佳实践)是什么?我应该使用字节数组复制流、关闭流还是关闭 s3Object?

我是 S3 和 InputStreams 的新手

最佳答案

取决于方法 1 和 2 是否相关...

如果依赖...(即方法 1 需要按顺序在方法 2 之前运行 - 我从你的问题中看不出原因)

使流处理方法成为通过流(修改或未修改)的“过滤器”

outputStream = processInputStreamMethod2(processInputStreamMethod1(audioInputStream))

如果独立...(从您的示例中可以看出,因为它们都试图直接读取“audioInputStream”)

为什么要按顺序做这些事情?

下载到字节数组并在此代码中跨该数组并行处理两种方法,

audioInputStream = s3object.getObjectContent();
int audioInputLength = s3object.getObjectMetadata().getContentLength();
byte[] content = new byte[audioInputLength];

int bytesRead = audioInputStream.read(content);

//Can be in parallel
processInputStreamMethod1(content);
processInputStreamMethod2(content);
或者,如果您有自由(带宽不是问题)有两个进程,每个进程都有自己的流?

这完全取决于您的上下文。

关于java.io.IOException : Attempted read on closed stream on aws s3 bucket,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50005773/

25 4 0