【问题标题】:convert servletinputstream to sequenceinputstream将servlet输入流转换为序列输入流
【发布时间】:2011-03-15 05:21:07
【问题描述】:

我正在接收包含输入流的 servlet。

InputStream input=req.getInputStream();

当我将输入流类型转换为 sequenceinputstream 时,我最终得到 ClassCastException org.apache.catalina.connector.CoyoteInputStream cannot be cast to java.io.SequenceInputStream。 请提供解决方案

【问题讨论】:

标签: java servlets stream


【解决方案1】:

我猜你还在处理your other problem。您无法将 ServletInputStream 转换为 SequenceInputStream。您可以从ServletInputStream 创建一个新的SequenceInputStream,但这对您没有帮助,因为您正在尝试访问各个部分(而ServletInputStream 只是没有该信息)。放弃吧,你正试图解决错误的问题。

如果您正在处理上传的文件,请尝试改用Commons / FileUpload。有关示例,请参阅usage page

【讨论】:

    【解决方案2】:

    为什么要使用序列输入流?

    Servlet 请求只能包含一个 InputStream。您不能转换或投射。 如果您的目标是读取 sevlet 收到的输入,只需继续读取 InputStream。

    【讨论】:

      【解决方案3】:

      SequenceInputStream 将两个或多个输入流合并为一个。它可以通过传递 InputStreamEnumerator 来创建,如下所示:

      Vector files = new Vector(); 
      files.addElement("/run.bat"); 
      files.addElement("/run.sys"); 
      InputStreamEnumerator e = new InputStreamEnumerator(files); 
      InputStream input = new SequenceInputStream(e); 
      

      或提供两个 InputStream,如下所示:

      InputStream input1 = new FileInputStream("c:\\data\\file1.txt");
      InputStream input2 = new FileInputStream("c:\\data\\file2.txt");
      InputStream combined = new SequenceInputStream(input1, input2);
      

      【讨论】:

      • 是的。我知道如何创建序列输入流。在 servlet 请求中,他们正在发送 sequenceinputstream 。所以我想接收流作为 sequenceinputstream 。所以请给我解决方案。提前致谢
      【解决方案4】:

      “在 servlet 请求中,他们正在发送序列输入流”是什么意思?您的意思是客户端正在发送从序列输入流中读取它们的数据吗? 无论如何,这两个流(来自客户端的输出一个和 servlet 中的客户端一个)是完全不相关的,我认为你不能按照你的意思去做。 还查看 org.apache.catalina.connector.CoyoteInputStream API,我看不到获取“原始”输入流的方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-12
        • 1970-01-01
        • 2018-07-25
        • 2011-09-30
        • 2016-11-24
        • 2012-11-17
        • 2012-04-24
        • 2017-09-06
        相关资源
        最近更新 更多