我正在使用 DBUnit 导出到 XML。当它写入我的地址对象时,这就是 XML 文件中出现的内容:
<![CDATA[rO0ABXNyABRjc2hlZXRzLmNvcmUuQWRkcmVzc/DHvyOozrwhAgACSQAGY29sdW1uSQADcm93eHAA
AAAAAAAAAA==]]>
现在我正在尝试阅读它,并将其转换回地址,但它不起作用:/
Address 类包含一个 int Row, int Column。
有人知道我可以如何转换吗?
用 saxon:base64Binary-to-octets() 解码表明它是八位字节序列的 base64 表示
172 237 0 5 115 114 0 20 99 115 104 101 101 116 115 46 99 111 114 101 46 65 100 100 114 101 115 115 240 199 191 35 168 206 188 33 2 0 2 73 0 6 99 111 108 117 109 110 73 0 3 114 111 119 120 112 0 0 0 0 0 0 0 0
但是这个八位字节序列的确切含义是任何人的猜测......
可以使用类似以下的内容从CDATA
部分(介于<![CDATA[
和 ]]>
)中的字符串加载回对象:
import java.io.ByteArrayInputStream;
import java.io.ObjectInputStream;
import com.google.common.io.BaseEncoding; // guava 14
import sheets.core.Address; // your class
class Decode {
static <T> T decode(String encoded) throws Exception {
byte[] serialized = BaseEncoding.base64().decode(encoded);
try (
ByteArrayInputStream serstr = new ByteArrayInputStream(serialized);
ObjectInputStream objstr = new ObjectInputStream(serstr);) {
return (T) objstr.readObject();
}
}
static void example() {
String encoded = "rO0ABXNy... [snipped] ..."; // load from xml element here.
Address a = decode(encoded);
}
}