使用二进制值image更新xml文件

时间:2012-06-19 07:09:26

标签: java android xml

这是一个来自XML客户端的示例Android文件。

<test>
<to>Mee</to>
<from>Youuu</from>
<img src="http://www.domain.com/path/to/my/image.jpg" />
</test>

我已经为此编写了一个XML解析器。我的问题是在将其传递给Android客户端时,我需要使用图像二进制数据而不是图像路径。如何实现这一目标,如何使用二进制数据更新上述XML。

2 个答案:

答案 0 :(得分:2)

您可以使用Base64对图像二进制数据进行编码(由byte[]表示),并将其作为CDATA包含在xml中。 然后在Android机器上,您只需将其解码为字节数组,然后渲染图像。

您可以使用Apache Commons进行编码/解码。

修改

您需要获取图像数据的字节表示才能进行转换。看看我的例子。这是使用sun.misc.BASE64Decodersun.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替代品,协议缓冲区可以帮助你。