Java 如何使用DocumentBuilder解析BufferedInputStream而不关闭流?

Java 如何使用DocumentBuilder解析BufferedInputStream而不关闭流?,java,xml,dom,Java,Xml,Dom,我有一个BufferedInputStream,它表示和XML文件,但我不确定模式是什么。因此,我要做的是解析XML,探索DOM以确定它动态使用的XML格式/模式,然后reset()流,然后将流传递到相应的解析库 但是,DocumentBuilder似乎正在为我关闭BufferedInputStream。我如何防止这种情况?有没有API方法可以防止这种情况发生?这是我能想到的最好的方法: 我的'real'BufferedInputStream实现不会将close()命令传播到'real'Buff

我有一个
BufferedInputStream
,它表示和XML文件,但我不确定模式是什么。因此,我要做的是解析XML,探索DOM以确定它动态使用的XML格式/模式,然后
reset()
流,然后将流传递到相应的解析库


但是,
DocumentBuilder
似乎正在为我关闭
BufferedInputStream
。我如何防止这种情况?有没有API方法可以防止这种情况发生?

这是我能想到的最好的方法:

  • 我的'real'
    BufferedInputStream
    实现不会将
    close()
    命令传播到'real'
    BufferedInputStream
    (但会传播所有其他方法)
  • 将修饰的
    BufferedInputStream
    传递给
    DocumentBuilder
  • reset()
    my'real'
    BufferedInputStream
  • close()

  • 更好的答案是受欢迎的,因为我宁愿通过API而不是通过API来实现。

    我会用一个实现来装饰
    BufferedInputStream
    ,该实现将读取的字节迭代存储到
    字节[]
    。正常关闭小溪。然后调用
    getBytes()
    并将带有这些字节的
    ByteArrayInputStream
    传递给
    DocumentBuilder
    。如果没有太多内存,但保存了两次对文件的读取,则会出现此问题。