2012-11-15 32 views
0
public static String getTextOf(String xsl) throws Exception { 
     DocXHandler docxh1 = new DocXHandler(ACE.getInputFilePath()); 
     InputStream inputDocumentXMLStream = docxh1.getInputDocumentXMLZERO(); 
    return new Cache().getXSLOutput(inputDocumentXMLStream, xsl); 
} 

上述方法將被調用超過100次,並帶有不同的xsl參數。現在每次InputStream的inputDocumentXMLStream被賦值(是超過100次)。由於我試圖重構這個代碼,因爲只有一次的InputStream將被分配value.My代碼變成現在這個樣子這種方式,通過改變inputDocumentXMLStream作爲全球房地產爲什麼我無法重用InputStream?

public static String getTextOf(String xsl) throws Exception { 
    return new Cache().getXSLOutput(inputDocumentXMLStream, xsl); 
    } 

。第一次我得到正確的結果但第二次我得到以下錯誤,

Unexpected end of ZLIB input stream 

所以電話給我如何再讀一遍?

回答

1

在到達蒸汽末端後,您不能重新開始讀取輸入流,因爲它僅在單方向移動。

我認爲解決您的問題的最好辦法是完全解析您的XML文件一次,並將值放在一些Java對象中。一旦完成,您可以簡單地使用地圖來檢索所需的值。 這也會非常有效。

例如

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

希望這會有所幫助。

+1

@Kate:它應該是有幫助的。我明白,與編程一次又一次讀取相同的文件相比,它在編程方面的額外努力。但一旦完成,我認爲它好多了。 –

+1

@Kate建議不要將'InputStream'保存在Map中(這是一個非常糟糕的方法)。您應該打開文件(使用'InputStream'或其他),解析文件以構建文件的內存中表示,並且有方法來訪問和導航整個結構。 –

+0

@LuiggiMendoza:我已經提到過,我不建議使用任何特定的java對象。我試圖分享一次解析文件並重用解析對象的想法。沒有其他的。希望澄清。 –

2

您只能讀取一次流,然後出現在EOF處,如錯誤消息所示。你試圖做的事情沒有意義。

0

您無法在不關閉文件的情況下重複使用輸入流。所有文件I/O功能依靠EOF停止。

0

對於每個xls文件,您必須解析該文件並創建Java的Excel文檔實例。 Java實例會給你InputStream。所以在這種情況下你無法逃脫。

但是對於同一個文件,你可以使用相同的InputStream。這將是一個單位或工作。

+0

原諒我,它不'xls'其'xslt',樣式表文件,... – Linda

1

我不知道你在getXSLOutput在做什麼,爲什麼你需要閱讀相同的InputStream不過100次,以避免EOF你可以在你getXSLOutput方法使用mark(int)標記流的開始,並在調用reset結束同樣的方法。看起來像做錯事情雖然...

爲了更好的結果嘗試讀取一次,並將內容存儲在數據類型inJava然後工作100次。

+0

@ ramsinb - 我試圖用mark(0)和reset()並得到'java.io.IOException:標記/重置不支持'。 – Linda

+0

這表明由'DocXHandler.getInputDocumentXMLZERO'返回的'InputStream'的實現不會執行'mark'或'reset'方法,因此這種方法將不起作用。您應該考慮填充Java數據結構並在100個方法調用中使用它的替代方法。 – ramsinb

+0

@ ramsinb-感謝您的評論,我依靠這一點。 – Linda

相關問題