java.io.IOException:在aws s3存储桶上尝试读取关闭流

时间:2018-04-24 15:40:10

标签: java amazon-web-services amazon-s3 inputstream

我想使用带有java的aws s3 bucket来处理文件。

我的代码

state

显然我得到了

  

java.io.IOException:尝试读取封闭流

处理此问题的最佳方式(最佳做法)是什么?我应该使用字节数组复制Stream,关闭流还是关闭s3Object?

我是S3和InputStreams的新手

2 个答案:

答案 0 :(得分:1)

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

如果 dependent ...(即方法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);

或者,如果您有自由(带宽不成问题),那么有两个进程都有各自的流吗?

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

答案 1 :(得分:0)

我认为您不能两次读取输入流,但是可以使用org.apache.commons.io.IOUtils将其复制到字节数组并重新使用。