Serialization 将二进制数据附加到序列化的xml标头

Serialization 将二进制数据附加到序列化的xml标头,serialization,encoding,binary,jaxb,Serialization,Encoding,Binary,Jaxb,我需要将二进制数据附加到文件中,但在此之前,该数据是xml头。整个文件不是正确的xml文件,但必须是正确的xml头,如下所示: <EncryptedFileHeader> <Algorithm>name</Algorithm> <KeySize>256</KeySize> <SubblockLength>64</SubblockLength> <CipherMode>E

我需要将二进制数据附加到文件中,但在此之前,该数据是xml头。整个文件不是正确的xml文件,但必须是正确的xml头,如下所示:

<EncryptedFileHeader>
    <Algorithm>name</Algorithm>
    <KeySize>256</KeySize>
    <SubblockLength>64</SubblockLength>
    <CipherMode>ECB</CipherMode>
    <sessionKey>sessionKey</sessionKey>  
</EncryptedFileHeader>
*binary data*
但它抛出了一个例外:

javax.xml.bind.PropertyException:名称:com.sun.xml.bind.xml声明值:false 位于javax.xml.bind.helpers.AbstractMarshallerImpl.setProperty(AbstractMarshallerImpl.java:358) 位于com.sun.xml.internal.bind.v2.runtime.MarshallerImpl.setProperty(MarshallerImpl.java:527)


感谢

实际上,我通过使用JAXB序列化xml头,然后将二进制数据(bytearray)附加到现有文件中,解决了这个问题。 使用缓冲读取器读取文件,如下所示:

BufferedReader reader = new BufferedReader(new FileReader("filepath"));
        String line, results = "";
        while ((line = reader.readLine()) != null) {
            results += line;
        }
        reader.close();

        String[] splited = results.split("</EncryptedFileHeader>");
        splited[0] += "</EncryptedFileHeader>";
        String s0 = splited[0];
        String s1 = new String(splited[1]);
        ByteArrayInputStream bais = new ByteArrayInputStream(s0.getBytes());
BufferedReader reader=newbufferedreader(newfilereader(“filepath”));
字符串行,结果=”;
而((line=reader.readLine())!=null){
结果+=直线;
}
reader.close();
String[]splited=results.split(“”);
拆分的[0]+=“”;
字符串s0=拆分的[0];
字符串s1=新字符串(拆分[1]);
ByteArrayInputStream bais=新的ByteArrayInputStream(s0.getBytes());
现在我遇到了第二个拆分字符串s1的问题,它包含来自“byteArrayOutputStream.toByteArray();”的数据。现在我必须将数据从这个字符串传输到字节数组。发件人:

"��A.����G�X���

例如:
[39、-63、-116、65、-123、-114、27、-115、-2103、-64、88、-99、-96、-26、-12]

我试过(在同一台机器上): 字节[]字节=s1.getBytes()

但字节数组不同,它返回34字节,而不是16字节。我读了很多关于编码的书,但还是不知道

编辑:


不同字节数的问题是由于新行按字符和字节流的不同表示。

您可以使用标准的
JAXB_FRAGMENT
属性。您可能会发现以下内容很有用:
BufferedReader reader = new BufferedReader(new FileReader("filepath"));
        String line, results = "";
        while ((line = reader.readLine()) != null) {
            results += line;
        }
        reader.close();

        String[] splited = results.split("</EncryptedFileHeader>");
        splited[0] += "</EncryptedFileHeader>";
        String s0 = splited[0];
        String s1 = new String(splited[1]);
        ByteArrayInputStream bais = new ByteArrayInputStream(s0.getBytes());