【问题标题】:How to extract byte-array from one xml and store it in another in Java如何从一个xml中提取字节数组并将其存储在Java中的另一个中
【发布时间】:2012-07-11 04:30:31
【问题描述】:

所以我使用 DocumentBuilderFactory 和 DocumentBuilder 来解析 xml。 所以它是DOM解析器。

但我想做的是提取字节数组数据(它是用 base64 编码的图像)

将其存储在一个对象中,然后在代码中将其写入另一个以 base64 编码的 xml。

顺便说一句,最好的存储方式是什么。 将其存储为字符串?还是字节数组?

如何以最佳方式提取字节数组数据并将其写出来。

我没有这方面的经验,所以想从小组中获得意见。

更新:我得到了 XML 我无法控制传入的以 binary64 编码的 XML

< byte-array >
  ... base64 encoded image ...
< /byte-array >

使用解析器我需要存储这个节点,问题是应该是字节还是字符串 然后将其写入新 xml 中的另一个节点。再次使用 base64 编码。

谢谢

【问题讨论】:

    标签: java xml image dom bytearray


    【解决方案1】:

    图像应作为字符串存储在第一个 xml 中。也许是这样的:

    <img src="data:image/gif;base64,sssssssssssss"/>
    

    如果您需要将相同的数据写入第二个 xml,只需使用已编码的相同字符串即可。如果您需要更改图像。获取属性 (element.getAttribute("src")),使用众多库之一 (apache commons codec) 对其进行解码,然后将其重新编码为第二个 xml 的字符串。

    更新响应:

    关于您的更新。在&lt;byte-array&gt; 元素内应该有纯文本。它可以存储为文本,然后在第二个 xml 中用作文本。

    【讨论】:

    • 如何在不添加不必要代码的情况下确定 MIME 类型?
    • 如果 OP 只需要从一个 xml 复制到一个新的 xml,那么就不需要解码和编码。甚至不需要了解&lt;byte-array&gt; 中的内容。不需要任何 mime 类型。另一方面,如果 OP 需要了解 &lt;byte-array&gt; 中的内容,则应该在某处具有文件类型的一些信息(或约定)。
    【解决方案2】:

    当您需要通过基于文本的协议(如 http)传输数据时,通常使用 Base64 编码。 Base64 编码的作用是将二进制数据编码为一组字符,这些字符可以通过基于文本的协议发送,而不会出现任何编码/解码问题。

    不确定您是否通过网络发送 xml,但您可以使用以下任何方法

    1. 将 base64 字符串作为简单字符串发送。但在这种情况下,编码和解码的责任将落在发送和接收应用程序上。

    2. 使用标准 base64Binary xml type。在这种情况下,解析器将负责解码字符串。

    【讨论】:

      【解决方案3】:

      Apache Commons 中有一个类可以帮助您使用 Base64 确保数据完整性:

      import org.apache.commons.codec.binary.Base64;
      
      String yourString = "testing";
      byte[] encoded = Base64.encodeBase64(yourString.getBytes());
      

      http://commons.apache.org/codec/apidocs/org/apache/commons/codec/binary/Base64.html

      虽然Base64 data 是除了+/ 之外的简单字母字符,所以如果将其存储在字符串中应该不会有任何数据丢失。

      【讨论】:

        猜你喜欢
        • 2018-05-01
        • 1970-01-01
        • 2021-06-14
        • 1970-01-01
        • 1970-01-01
        • 2019-11-17
        • 1970-01-01
        • 1970-01-01
        • 2019-12-31
        相关资源
        最近更新 更多