我有一個類似於an earlier question about emitting XML的情況。我正在分析SAX ContentHandler中的數據,並將其序列化爲流。我懷疑鏈接問題中的解決方案 - 儘管正是我在尋找API的方法 - 並不是內存高效的,因爲它涉及到XSLT處理器的身份轉換。我希望程序的內存消耗是有限的,而不是隨着輸入大小的增長而增長。什麼是從JAXP SAX ContentHandler發出XML的最節省內存的方式?
如何輕鬆地將參數傳遞給我的ContentHandler方法到序列化程序,而不用雜技來適應例如StAX到SAX,或者更糟的是,將SAX事件內容複製到輸出流?
編輯:這是我之後的一個簡單例子。 thingIWant
應該只寫入給它的OutputStream。就像我說的,早期的問題有一個TransformerHandler,它給了我正確的API,但它使用XSLT處理器而不是簡單的序列化。
public class MyHandler implements ContentHandler {
ContentHandler thingIWant;
MyHandler(OutputStream outputStream) {
thingIWant = setup(outputStream);
}
public void startDocument() throws SAXException {
// parsing logic
thingIWant.startDocument();
}
public void startElement(String uri, String localName, String qName,
Attributes atts) throws SAXException {
// parsing logic
thingIWant.startElement(uri, localName, qName, atts);
}
public void characters(char[] ch, int start, int length) throws SAXException {
// parsing logic
thingIWant.characters(ch, start, length);
}
// etc...
}
你的問題不是很清楚。你能舉個例子嗎? – 2009-12-29 23:44:23
如果您擔心的是默認轉換是否構建輸出的內存中表示,請不要。只要您使用SAX源代碼,它將通過事件傳遞。然而,你似乎想要更多的東西,或許是某種「T恤」操作。如果是這種情況,請描述您的確切流程。 – kdgregory 2009-12-30 16:44:18
@kdgregory:謝謝你的回答。這是一種T型操作。 SAXParser將使用MyHandler()。 MyHandler的一部分操作是將其輸入回顯到給定的OutputStream中。另一部分(在我的例子中解析邏輯)不會影響這個輸出。 – 2009-12-30 16:59:39