2016-11-07 35 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)) 
相關問題