这是一个BOM 表头。
前 4 个字节表示文件大小 00 00 01 F9 = 0 + 0 + 256 + 249 = 505(包括表示 UTF-8 (EF BB BF) 的 3 个字节。因此 xml 长度将为 502。
如何使用 Jaxb 视图处理此流:
字节顺序标记搞砸了 Java 中的文件读取
为什么 org.apache.xerces.parsers.SAXParser 不跳过 utf8 编码的 xml 中的 BOM?
JAXB 解组器 BOM 句柄
但是,我更喜欢逐字节处理流,将其读入 StringBuffer(因为我还需要字符串格式的日志记录)
我的逐字节读取解决方案是等待'<'字符,因此是xml消息中的第一个字符。
要在发送响应之前添加 BOM 标题,我使用了类似的方法:
import java.nio.ByteBuffer;
public byte[] getBOMMessage(int xmlLenght) {
byte[] arr = new byte[7];
ByteBuffer buf = ByteBuffer.wrap(arr);
buf.putInt(xmlLenght+3);
arr[4]=(byte)0xef;
arr[5]=(byte)0xbb;
arr[6]=(byte)0xbf;
return arr;
}