我正在将excel(xls)文件上传到s3,然后另一个应用程序应该从s3下载该文件并使用Apache POI阅读器进行解析。读者接受inputstream
类型作为输入,但是为了正确解析Excel,它期望PushbackInputStream
。我从s3下载的文件中获得的输入流的类型为S3ObjectInputStream
。如何将S3ObjectInputStream
转换为PushbackInputStream
?
我尝试直接将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)
.....
我尝试将S3ObjectInputStream强制转换为PushbackInputStream,但导致classcastexception。
java.lang.ClassCastException: com.amazonaws.services.s3.model.S3ObjectInputStream cannot be cast to java.io.PushbackInputStream
任何人都知道解决方案
最佳答案
这解决了我的问题。
InputStream inputStream = s3object.getObjectContent();
PushbackInputStream pushbackInputStream = new PushbackInputStream(inputStream);