<test>
<to>Mee</to>
<from>Youuu</from>
<img src="http://www.domain.com/path/to/my/image.jpg" />
</test>
我已经为此编写了一个XML解析器。我的问题是在将其传递给Android客户端时,我需要使用图像二进制数据而不是图像路径。如何实现这一目标,如何使用二进制数据更新上述XML。
答案 0 :(得分:2)
您可以使用Base64对图像二进制数据进行编码(由byte[]
表示),并将其作为CDATA包含在xml中。
然后在Android机器上,您只需将其解码为字节数组,然后渲染图像。
您可以使用Apache Commons进行编码/解码。
修改强>
您需要获取图像数据的字节表示才能进行转换。看看我的例子。这是使用sun.misc.BASE64Decoder
和sun.misc.BASE64Encoder
,您可能需要根据您在Android上使用的内容进行调整(请参阅Apache Commons)。
public class SO11096275 {
public static byte[] readImage(URL url) throws IOException {
final ByteArrayOutputStream bais = new ByteArrayOutputStream();
final InputStream is = url.openStream();
try {
int n;
byte[] b = new byte[4096];
while ((n = is.read(b)) > 0) {
bais.write(b, 0, n);
}
return bais.toByteArray();
} finally {
if (is != null) {
is.close();
}
}
}
public static void main(String[] args) throws Exception {
URL url = new URL("http://upload.wikimedia.org/wikipedia/en/b/bc/Wiki.png");
byte[] imgData = readImage(url);
String imgBase64 = new BASE64Encoder().encode(imgData);
System.out.println(imgBase64);
byte[] decodedData = new BASE64Decoder().decodeBuffer(imgBase64);
FileUtils.writeByteArrayToFile(new File("/path/to/wikipedia-logo.png"), decodedData); // apache commons
}
}
然后您将图像数据作为imgBase64
中的字符串,您只需使用所需的DOM实现将节点附加到xml,例如dom4j。有一些方法可以将CDATA
添加到XML中。最后,在您的Android上,您只需要检索节点内容,并且您可以像上面一样对其进行解码,并根据图像执行您想要的操作。
答案 1 :(得分:0)
像JSON这样的XML替代品,协议缓冲区可以帮助你。