我尝试将字符串转换为byte(byte [])数组并将其保存在xml文件中。 我的问题是使用jaxb编组和解组对象后字节[]的不同值。
我很抱歉发布的格式!
`
@XmlRootElement
public class Token {
private byte[] token;
public void createToken(){
String stringTest = "ABCDEF";
this.token = stringTest.getBytes(Charset.forName("UTF-8"));
}
public byte[] getToken() {
return token;
}
public void setToken(byte[] token) {
this.token = token;
}
}// ENDE CLASS TOKEN
@XmlRootElement(namespace = "TokenNS")
public class TokenCollection {
private List<byte[]> collection = new ArrayList<>();
public void addToken(byte[] tokenIn){
this.collection.add(tokenIn);
}
@XmlElement( name = "TokenCollection")
public List<byte[]> getTokenCollection(){
return this.collection;
}
public void test(){
Token t = new Token();
t.createToken();
byte[] tmp = t.getToken();
this.addToken(tmp);
}
}// ENDE TOKENCOLLECTION
STARTER:
public Starter() {
Path path = Paths.get("trivial.xml");
tc.test();
JAXB.marshal(tc, System.out);
try (Writer out = Files.newBufferedWriter(path, StandardCharsets.UTF_8)) {
JAXB.marshal(tc, out);
} catch (IOException io) {
io.printStackTrace();
}
}
`
输出: 应该: 65 66 67 68 69 70
XML-FILE(错误的值):
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns2:tokenCollection xmlns:ns2="TokenNS">
<TokenCollection>QUJDREVG</TokenCollection>
</ns2:tokenCollection>
答案 0 :(得分:3)
JAXB(JSR-222)实现将XML中的byte[]
表示为base64Binary
模式类型。如果您想要替代表示,可以使用XmlAdapter
。
答案 1 :(得分:0)
现在,在您编辑帖子后,它完美无缺。
我使用以下代码读取XML,最后打印出相同的"ABCDEF"
字符串:
Path path = Paths.get("trivial.xml");
TokenCollection tc = JAXB.unmarshal(path.toFile(), TokenCollection.class);
// Prints "ABCDEF"
System.out.println(new String(tc.getTokenCollection().get(0),
StandardCharsets.UTF_8));