如何防止 DocumentBuilderFactory 关闭底层输入流

how to prevent DocumentBuilderFactory close underlying inputstream

我正在尝试使用 DocumentBuilderFactory
解析 xml 文件 解析进行得很顺利,但问题是 DocumentBuilderFactory 在调用我不想要的解析方法时关闭了底层流,因为我需要进一步处理流

我创建了一个包装器 class 以防止关闭输入流,但它仍然会关闭它

有什么建议吗?

这是我的包装纸class

import java.io.IOException;
import java.io.InputStream;

public class UncloseableInputStream extends InputStream  {

    private final InputStream input;
    
     private boolean canBeClosed = false;
     
    public UncloseableInputStream(InputStream input) {
         this.input = input;
    }

    @Override
    public void close() throws IOException {    
        if(canBeClosed) {
            super.close();
        }
    }
    
    @Override
    public int read() throws IOException {
      return input.read();
    }

    public void allowToBeClosed() { 
        canBeClosed = true; 
    }
}

示例 DocumentBuilderFactory 解析代码

        builderFactory = DocumentBuilderFactory.newInstance();
        builder = builderFactory.newDocumentBuilder();
        try {
            //NOT EMPTY
            byte[] bytesFile = batchFileUtils.fileToByteArray(inputStream);
            System.out.println("ok");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        xmlDocument = builder.parse(new UncloseableInputStream(inputStream));
        try {
            //EMPTY
            byte[] bytesFile = batchFileUtils.fileToByteArray(inputStream);
            System.out.println("ok");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

非常感谢

如评论部分所述,此特定请求的解决方案是复制当前 inputStream 对象并将新对象用于第二个用例。

根据要求将其添加为答案。