2016-11-07 34 views
2

我有一个方法返回S3上的文件的InputStream。如果我使用这个方法两次,S3的调用将被执行两次。我想知道是否有一种方法来存储输入流?有没有办法来存储/缓存InputStream?

例如:

InputStream getInputStreamForObject(String fileName) { 
    //return inputstream for fileName on S3 
} 

String determineFiletype (InputStream is) { 
//some way to determine filetype from inputstream. 
//inputstream would be read here 
} 

void someMethod(String fileName) { 
    String fileType = determineFileType(getInputStreamForObject(fileName)) 
    if (fileType == "DOCX") { 
    docxParser.parse(getInputStreamForObject(fileName)) 
    } 
    else if (fileType == "XLSX") { 
    xlsxParser.parse(getInputStreamForObject(fileName)) 
    } 
} 
+1

可以使用带有标记的的BufferedInputStream()和reset() –

+3

或者你可以读到的一切为一个字节数组在内存中,并在字节数组上打开ByteArrayInputStream。 –

+0

@Kayaman谢谢:)这应该是伪代码。我在groovy编码,所以这将工作 – Anthony

回答

0

发布为别人类似的问题的答案。该解决方案是基于JB Nizet评论

这使用Commons IO来的InputStream转换为字节组

byte[] bytes = IOUtils.toByteArray(getInputStreamForObject(fileName)); 
fileType = determineFileType(new ByteArrayInputStream(bytes)); 
docxParser.parse(new ByteArrayInputStream(bytes)) 
相关问题