public static String getTextOf(String xsl) throws Exception {
DocXHandler docxh1 = new DocXHandler(ACE.getInputFilePath());
InputStream inputDocumentXMLStream = docxh1.getInputDocumentXMLZERO();
return new Cache().getXSLOutput(inputDocumentXMLStream, xsl);
}
上述方法将使用不同的xsl参数调用超过100次。现在每次InputStream inputDocumentXMLStream都被赋值(是的,超过100次)。因为我试图重构这个代码,只有一次InputStream会被赋值。我的代码现在变成这样了,
public static String getTextOf(String xsl) throws Exception {
return new Cache().getXSLOutput(inputDocumentXMLStream, xsl);
}
通过将inputDocumentXMLStream更改为全局属性。我第一次得到正确的结果,但第二次得到以下错误,
Unexpected end of ZLIB input stream
请告诉我如何再次阅读?
答案 0 :(得分:2)
您只能读取一次流,然后您就是EOF,正如错误消息所示。你想要做的事情没有意义。
答案 1 :(得分:1)
在达到蒸汽结束时无法重新开始读取输入流,因为它仅向单向移动。
我认为解决问题的最佳方法是完全解析XML文件并将值放在一些java对象中。完成后,您只需使用地图来检索所需的值。 这也会非常有效。
e.g。
Object parseValueMap = paseXML(inputDocumentXMLStream);//use appropriate object
//^ called only once, you may use some libraries such as JAXB to parse the xml
假设xsl
是路径表达式,您可能希望在上一步创建的Java集合中应用该路径。您可以使用JXPath
等库作为:
String value = JXPathEvaluator(parseValueMap, xsl);
希望这有帮助。
答案 2 :(得分:1)
我不确定你在getXSLOutput
做了什么以及为什么你需要读取相同的输入流100次但为了避免EOF你可以使用mark(int)来标记你的流的开头getXSLOutput
方法,并在同一方法的末尾调用reset。看起来好像做错了......
为了获得更好的结果,请尝试阅读一次并将内容存储在Java中的数据类型中,然后再进行100次。
答案 3 :(得分:0)
您不能在文件中重复使用输入流而不关闭它。所有文件I / O功能都依赖于EOF来停止。
答案 4 :(得分:0)
对于每个xls文件,您必须解析文件并创建Java的Excel Document实例。 该Java实例将为您提供InputStream。所以在这种情况下你无法逃脱。
但是对于同一个文件,您可以使用相同的InputStream。那将是一个单一的单位或工作。