Serialization 将二进制数据附加到序列化的xml标头
我需要将二进制数据附加到文件中,但在此之前,该数据是xml头。整个文件不是正确的xml文件,但必须是正确的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
<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());