如何将S3ObjectInputStream转换为PushbackInputStream

sta*_*ion 2 java excel inputstream amazon-s3 apache-poi

我正在将一个excel(xls)文件上传到s3,然后另一个应用程序应该从s3下载该文件并使用Apache POI阅读器进行解析.读者接受inputstream类型作为输入,但要正确解析它所期望的excel PushbackInputStream.我从s3下载的文件中获得的输入流是类型的S3ObjectInputStream.我如何转换S3ObjectInputStreamPushbackInputStream

我尝试直接传递S3ObjectInputStream(因为这是一个inputStream)PushbackInputStream,但它导致以下异常:

org.springframework.batch.item.ItemStreamException: Failed to initialize the reader
    at org.springframework.batch.item.support.AbstractItemCountingItemStreamItemReader.open(AbstractItemCountingItemStreamItemReader.java:147)
    at org.springframework.batch.item.support.CompositeItemStream.open(CompositeItemStream.java:96)
.....
.....
Caused by: java.lang.IllegalStateException: InputStream MUST either support mark/reset, or be wrapped as a PushbackInputStream
at org.springframework.batch.item.excel.poi.PoiItemReader.openExcelFile(PoiItemReader.java:82)
.....
Run Code Online (Sandbox Code Playgroud)

我尝试将S3ObjectInputStream转换为PushbackInputStream,但它导致了classcastexception.

java.lang.ClassCastException: com.amazonaws.services.s3.model.S3ObjectInputStream cannot be cast to java.io.PushbackInputStream
Run Code Online (Sandbox Code Playgroud)

任何人都知道解决方案

sta*_*ion 5

这解决了我的问题.

InputStream inputStream = s3object.getObjectContent(); 
PushbackInputStream pushbackInputStream = new PushbackInputStream(inputStream);
Run Code Online (Sandbox Code Playgroud)