Я сконцентрировался только на спецификации, слишком поздно увидев проблему с нулевыми байтами. Я до сих пор публикую его как дополнение на случай, если у кого-то возникнут проблемы только с спецификациями. Пожалуйста, будьте добры в отношении отрицательных голосов. :)
Вы можете прочитать первые три байта с InputStream
, который поддерживает mark()
и reset()
, прочитать первые три байта и сбросить, если они не были спецификацией:
InputStream in = new BufferedInputStream(
new FileInputStream(new File("xmlfile.xml")));
in.mark(3);
byte[] maybeBom = new byte[] {
(byte) in.read(), (byte) in.read(), (byte) in.read() };
if(!Arrays.equals(maybeBom, new byte[] { (byte) 0xEF, (byte) 0xBB, (byte) 0xBF })) {
in.reset();
}
Я использую BufferedInputStream
, потому что FileInputStream
не поддерживает mark()
.