如何去除 java 中输入流的前几个字符?

How to strip the first few characters of an input stream in java?

我有一个 fileInputStream 对象,它可能包含也可能不包含 xml 声明 <?xml version='1.0'?>。我需要删除 xml 声明(如果存在)。如何在不将 inputStream 对象转换为字符串、剥离 XML PI 然后将其转换回输入流的情况下执行此操作?

InputStream inputStream = new FileInputStream(importFilePath);

我能想到两个方案:

  1. 使用FileInputStream.getChannel()。从频道读取后,如果需要,您可以调用 position(0) 将其重置为开头。

  2. 使用自定义 FilteredInputStream 包装 InputStream。可以这样写,第一行提前缓冲,判断是使用还是丢弃。

FileInputStream 包裹在 PushbackInputStream 中,并检查它是否以 PI 开头。如果是这样,请读出来。不然把读到的字符推回去测试一下。