我有一个InputStream对象,我想复制它。这样做的最佳方式是什么?
数据不是来自文件,而是作为从网页发送的http表单的有效负载,我使用的是Apache Commons FileUpload lib,我的代码给了我InputStream,如下所示:... < / p>
InputStream imageStream = null;
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
List items = new ArrayList();
items = upload.parseRequest(request);
Iterator iter = items.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (item.isFormField()) { // this is subject Id
if (item.getFieldName().equals("subId")) {
subId = Integer.parseInt(item.getString());
System.out.println("SubId: " + subId);
}
} else {
imageStream = item.getInputStream();
}
}
获取imageStream的副本/副本的最佳方法是什么?
答案 0 :(得分:5)
如果您希望能够再次阅读该流,我认为您最好的选择是将InputStream
包裹在BufferedInputStream
中,然后使用BufferedInputStream
{{1} }和mark()
方法。您拥有的reset()
可能不会直接支持它们,因为据我所知,它会从网络上接收数据。
答案 1 :(得分:1)
“复制”输入流的最佳方法是使用commons-io。由于您正在使用commons fileupload alread,因此额外的依赖性不会受到影响:
但请注意,您无法真正“复制”流。你只能“消费”它(如果你愿意,可以将内容存储在内存中)