AmazonWeb服务java。木卫一。IOException:尝试读取aws s3存储桶上的关闭流
我想使用aws s3 bucket和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
处理这一问题的最佳方法(最佳实践)是什么?我应该用字节数组复制流、关闭流还是关闭对象
我不熟悉S3和InputStreams
# 1 楼答案
取决于方法1和方法2是否相关强>
如果依赖。。。(即方法1需要按顺序在方法2之前运行-我无法从您的问题中看出原因)
使流处理方法成为通过流(修改或未修改)的“过滤器”
即
如果独立。。。(从您的示例中可以看出这一点,因为他们都试图直接读取“audioInputStream”)
为什么这些事情是按顺序进行的
下载到一个字节数组,并在此代码中在此数组中并行处理这两个方法
或者,如果您有自由度(带宽不是一个问题),是否有两个进程,每个进程都有自己的流
这完全取决于你所处的环境
# 2 楼答案
我认为您不能读取输入流两次,但可以使用org进行复制。阿帕奇。平民木卫一。IOUtils到字节数组并重用它