JAXB写入和读取byte []到xml - 不同的值

时间:2014-08-06 05:17:46

标签: java jaxb byte

我尝试将字符串转换为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>

2 个答案:

答案 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));