我试图分析应用程序中最近发现的问题,并意识到我的 inputStream.reset()
方法失败,因为我尝试对 FileInputStream
进行操作。
看来我的方法调用For apache的DiskFile.getInputStram()
返回ByteArrayInputStream
实例(标记支持)或FileInputStream
(标记不支持) )基于特定文件大小阈值的实例。
我必须获取此输入流的代码是:
FormFile file = multipartForm.getFiles().get(0); // It's always one file
InputStream is = file.getInputStream();
// Read the stream and did job
// Now I want to reset it.
// bad coding from my side because I didn't check markSupported
is.reset();
// Got IO error immediately after this. But anything below 256KB is ok
我确信 Oracle JDK 文档或 apache 站点中的某处提到/解释了这一点。但似乎不记得任何引用文献。有谁知道这种行为是否有意义?
最佳答案
我不熟悉 Struts API,但对我来说,似乎当返回类型是 InputStream
而不是特定的子类时,那么您无法保证该类型的实际类型返回流。
由于调用 reset()
仅在前面有 mark(readlimit)
调用时才有效,因此处理未指定的 InputStream
类型通常是直接的-转发:
InputStream inputStream = …
int readlimit = …
if(!inputStream.markSupported()) {
inputStream = new BufferedInputStream(inputStream, readlimit);
}
inputStream.mark(readlimit);
// read some date, not more than readlimit
inputStream.reset();
关于java - 当文件大小发生变化时,Struts DiskFile.getInputStream() 返回 ByteArrayInputStream 和 FileArrayInputStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47347194/