【问题标题】:What is the best way to make a copy of an InputStream in java [duplicate]在java中复制InputStream的最佳方法是什么[重复]
【发布时间】:2010-12-24 11:34:15
【问题描述】:

可能重复:
How to make a deep copy of an InputStream in Java ?

我有一个 InputStream 对象,我想复制它。最好的方法是什么?

数据不是来自文件,而是作为从网页发送的 http 表单的有效负载,我使用的是 Apache Commons FileUpload 库,我的代码给我 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();

            }
        }

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

【问题讨论】:

  • 复制副本是什么意思?如果这是您想要的,您可以多次读取输入流。
  • @MarvinLabs - 抱歉,我猜“重复副本”是重言式

标签: java copy inputstream


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    “复制”输入流的最佳方式是使用 commons-io。由于您已经在使用 commons fileupload,因此额外的依赖不会受到伤害:

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

    但请注意,您不能真正“复制”流。你只能“消费”它(如果你愿意,可以将内容存储在内存中)

    【讨论】:

      猜你喜欢
      • 2010-09-16
      • 2010-10-10
      • 1970-01-01
      • 1970-01-01
      • 2010-09-06
      • 2011-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多