Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java servlet:将ServletInputStream转换为FileInputStream_Java_Servlets_Inputstream_Fileinputstream - Fatal编程技术网

Java servlet:将ServletInputStream转换为FileInputStream

Java servlet:将ServletInputStream转换为FileInputStream,java,servlets,inputstream,fileinputstream,Java,Servlets,Inputstream,Fileinputstream,我正在编写一个servlet,它接收一个xml文件,将其提供给另一个类,并将带有一些注释的html文件返回给客户端。 我使用如下方式获取输入xml: input=request.getInputStream() 但是这个输入是一个ServletInputStream,而另一个类(用于注释)需要一个FileInputStream 如果我给XMLEventReader(在另一个类中)提供ServletInputStream,我会得到一个解析错误: ParseError at [row,col]:[1

我正在编写一个servlet,它接收一个xml文件,将其提供给另一个类,并将带有一些注释的html文件返回给客户端。 我使用如下方式获取输入xml:

input=request.getInputStream()

但是这个输入是一个ServletInputStream,而另一个类(用于注释)需要一个FileInputStream

如果我给XMLEventReader(在另一个类中)提供ServletInputStream,我会得到一个解析错误:

ParseError at [row,col]:[1,1]
Message: Content is not allowed in prolog.
我认为这是因为servletinputstream而不是fileinputstream

问候
我希望有人能帮助我:)

我认为后一个问题不太可能是因为它是一个
服务输入流。解析器不应该关心数据的源

我认为输入流中的数据更有可能是不正确的


您当前需要
FileInputStream
的类应该进行重构,以便尽可能使用
InputStream
。。。否则,您必须首先将数据写入实际的文件,这显然是不理想的。

我认为后一个问题不太可能是因为它是一个
ServletiInputStream
。解析器不应该关心数据的源

我认为输入流中的数据更有可能是不正确的


您当前需要
FileInputStream
的类应该进行重构,以便尽可能使用
InputStream
。。。否则,您必须首先将数据写入实际的文件,这显然是不理想的。

您应该从ServletInputStream读取数据,并将其转储到FileOutputStream中。通过这种方式,您可以查看正在发送的数据,然后使用FileInputStream和您描述的需要该数据的类分别测试该数据。我的猜测是,现在也会发生同样的事情,因为正如前面的海报所建议的那样,数据可能格式错误。

您应该从ServletInputStream读取数据,并将其转储到FileOutputStream中。通过这种方式,您可以查看正在发送的数据,然后使用FileInputStream和您描述的需要该数据的类分别测试该数据。我的猜测是,现在也会发生同样的事情,因为正如前面的海报所建议的那样,数据的格式可能是错误的。

好吧,我现在聪明了一点:) 问题是:在ServletInputStream中,某些头信息(如内容类型等)位于开头(最后一行)。 是否有一个智能的解决方案来剪切此信息


问候

好了,我现在聪明了一点:) 问题是:在ServletInputStream中,某些头信息(如内容类型等)位于开头(最后一行)。 是否有一个智能的解决方案来剪切此信息


问候

如果我用类似于input=FileInputStream(“xml文件的本地路径”)的东西启动“comment类”,一切都正常,但是如果我通过servlet(Servletiinputstream)将相同的xml提供给这个类,我会得到解析错误。因此,xml文件应该是正确的。在第二个节点上出现解析错误可能会有所帮助。第一个
显然有效。您可能没有考虑响应中的http头。如果我用类似于input=FileInputStream(“xml文件的本地路径”)的东西启动“comment类”,一切都正常,但是如果我通过servlet(ServletiInputStream)将相同的xml提供给这个类,我会得到解析错误。因此,xml文件应该是正确的。在第二个节点上出现解析错误可能会有所帮助。第一个
显然有效。您可能没有在响应中考虑http头。好的,我更改了“InputStream”中的输入但同样的问题是,是否有可能将ServletInputStream转换为一个字符串,如果它与原始xml文件之间存在微小差异,我可以查找该字符串?请使用
InputStreamReader
。别忘了考虑字符编码。此外,我认为现在是时候让自己度过难关了。它解释了你需要知道的要点。@CaptnLenz:我建议你把数据写入磁盘,然后在那里查看。打开一个
FileOutputStream
,一次只从输入流中读取一个块,然后将其写入输出流。然后您可以查看该文件。好的,我更改了“InputStream”中的输入,但同样的问题是,是否有可能将ServletInputStream转换为一个字符串,如果它与原始xml文件之间存在微小差异,我可以查找该字符串?请使用
InputStreamReader
。别忘了考虑字符编码。此外,我认为现在是时候让自己度过难关了。它解释了你需要知道的要点。@CaptnLenz:我建议你把数据写入磁盘,然后在那里查看。打开一个
FileOutputStream
,一次只从输入流中读取一个块,然后将其写入输出流。然后你可以查看文件。一个新问题应该放在一个新问题中,而不是一个新答案。这不是一个论坛。你应该删除这个“答案”,否则它可能会被否决。你最初的问题已经得到了回答。不要忘记点击左侧的复选标记,将实际帮助解决问题的答案标记为“接受”。另请参见。新问题应包含在新问题中,而不是新答案中。这不是一个论坛。你应该删除这个“答案”,否则它可能会被否决。你最初的问题已经得到了回答。不要忘记点击左侧的复选标记,将实际帮助解决问题的答案标记为“接受”。另见。