2011-12-01 65 views
3

我有一個BufferedInputStream從中我想解析XML與SAXParser但隨後又重新使用它(例如mark(int) & reset())。但是,此流在parse()方法中關閉。是否有可能以某種方式告訴SAXParser將其打開?最後的手段是用不可關閉的流封裝這個流。的Java SAXParser的 - 保持開放的InputStream

謝謝。

回答

5

如何像:

class WontCloseBufferedInputStream extends BufferedInputStream { 
    public void close() { 
    // Do nothing. 
    } 

    public void reallyClose() { 
    super.close(); 
    } 
} 
+0

你們,這是不得已而爲之我提到,但無論如何感謝 – woky

+0

我很想知道你爲什麼看到作爲最後的手段。它確實是你想要的。 – OldCurmudgeon

+0

因爲它很醜。 IMO庫不應該關閉在InputStream/Reader中傳遞。 – woky

-2

您可以通過InputSource對象,而不是爲InputStream對象的SAXParser

示例代碼

SAXParser parser = // saxpaser object 
     InputSource isource = new InputSource(); 
     InputStream istream = //your inputstream 
     isource.setByteStream(istream); 
     parser.parse(isource, handler); 
+1

解析器完成時是否關閉了「InputSource」?如果是這樣,這是無益的。 – OldCurmudgeon

+2

@Paul:當然是 – woky

+0

但是這個帖子並沒有解決問題,也沒有提示解決方案:o) –