Java SAXParser - 保持输入流打开

问题描述 投票:0回答:3

我有一个

BufferedInputStream
,我想用
SAXParser
从中解析 XML,然后再次重用它(例如
mark(int)
reset()
)。然而这个流在
parse()
方法中被关闭。是否有可能以某种方式告诉
SAXParser
将其保持打开状态?最后的手段是用不可关闭的流来包装这个流。

谢谢你。

java stream sax
3个回答
8
投票

像这样的东西怎么样:

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

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

0
投票

我对 InputStream 使用以下包装器来防止解析器 vom 关闭原始流:

    private static class InputStreamWrapper extends InputStream {
    private InputStream input;

    public InputStreamWrapper(InputStream input) {
        this.input = input;
    }

    @Override
    public int read() throws IOException {
        return input.read();
    }

    // Must be overriden for better performance
    @Override
    public int read(byte[] b, int off, int len) throws IOException {
        return input.read(b, off, len);
    }

    @Override
    public void close() {
    }
}

包装纸的使用方式类似于

saxParser.parse(new InputStreamWrapper(input), handler)

将InputStream放入InputSource并没有帮助。这是由 SAX 解析器在内部完成的。


-1
投票

您可以将 InputSource 对象而不是 InputStream 对象传递给 SAXParser

示例代码

SAXParser parser = // saxpaser object
        InputSource isource = new InputSource();
        InputStream istream = //your inputstream
        isource.setByteStream(istream);
        parser.parse(isource, handler);
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.