在java中制作InputStream副本的最佳方法是什么

Ank*_*kur 6 java copy inputstream

可能重复:
如何在Java中创建InputStream的深层副本?

我有一个InputStream对象,我想复制它.做这个的最好方式是什么?

数据不是来自文件,而是作为从网页发送的http表单的有效负载,我使用的是Apache Commons FileUpload lib,我的代码给了我InputStream,如下所示:...

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();

            }
        }
Run Code Online (Sandbox Code Playgroud)

获取imageStream的副本/副本的最佳方法是什么?

Fla*_*vio 5

如果您希望能够再次读取流,我认为您最好的选择是将其包装InputStream在a中BufferedInputStream,然后使用BufferedInputStream mark()reset()方法.在InputStream你有可能不会直接支持他们,因为据我的理解是从网络接收数据.


Luk*_*der 1

“复制”输入流的最佳方法是使用 commons-io。由于您已经使用了 commons fileupload,因此额外的依赖项不会造成损害:

http://commons.apache.org/io/

但请注意,您无法真正“复制”流。您只能“使用”它(然后可以将内容存储在内存中,如果您愿意的话)