-3

在实际的 xml 之前,我正在使用 java jaxb通过套接字解组 xml请求

<?xml version="1.0"....

我收到这些字节

00 00 01 F9 EF BB BF

它们是什么?,xml的大小?,会话ID?...

发件人msxml4用于执行对我的服务的请求。

此外,我可以看到发件人期望这种类型的标头(如果我直接发送 xml 响应,它会中继前 7 个字节)。

因此,当我了解这些字节是什么时,是否有任何“正常”的方法jaxb可以用来添加此标头,或者我是否需要手动添加。

感谢您的任何回复

4

1 回答 1

1

这是一个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;
}
于 2015-09-30T07:40:05.190 回答