我想使用带有java的aws s3 bucket来处理文件。
我的代码
state
显然我得到了
java.io.IOException:尝试读取封闭流
处理此问题的最佳方式(最佳做法)是什么?我应该使用字节数组复制Stream,关闭流还是关闭s3Object?
我是S3和InputStreams的新手
答案 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将其复制到字节数组并重新使用。