我创建了一个扩展 BufferedInputStream 的“ResetOnCloseInputStream”,因为我将它传递给 WorkbookFactory.create(InputStream) 并在阅读工作簿后关闭流,而我需要再次使用流。ResetOnInputStream 看起来像这样 -
public class ResetOnCloseInputStream extends BufferedInputStream {
private final InputStream decorated;
public ResetOnCloseInputStream(InputStream anInputStream) {
super(anInputStream);
if (!anInputStream.markSupported()) {
throw new IllegalArgumentException("marking not supported");
}
anInputStream.mark( 1 << 24); // magic constant: BEWARE
decorated = anInputStream;
}
@Override
public void close() throws IOException {
decorated.reset();
}
public void realClose() throws IOException {
decorated.close();
}
@Override
public int read() throws IOException {
return decorated.read();
}
}
但是当它传递给
workbook = WorkbookFactory.create(stream);
我得到这个错误-
Caused by: java.io.IOException: Stream closed
at java.io.BufferedInputStream.getBufIfOpen(BufferedInputStream.java:145)
at java.io.BufferedInputStream.read(BufferedInputStream.java:308)