【问题标题】:Getting XML data from the byteArray of a zipFile从 zipFile 的 byteArray 获取 XML 数据
【发布时间】:2011-07-21 18:49:02
【问题描述】:

我正在编写一个简单的程序,它从一个对象中检索 XML 数据,并根据用户标准动态地解析它。由于可用的格式,我无法从对象中获取 XML 数据。

包含 XML 的对象以 zipFile 的 byteArray 形式返回数据,如下所示。

    MyObject data = getData();
    byte[] byteArray = data.getPayload(); 

//上面返回一个zipFile的byteArray

我检查的方法是将 byteArray 写入字符串

    String str = new String(byteArray); 

//上面返回一个字符串,里面有奇怪的字符。

然后我将数据写入文件。

    FileOutputStream fos = new FileOutputStream("new.txt");
    fos.write(byteArray);

我将 new.txt 重命名为 new.zip。当我使用 WinRAR 打开它时,弹出了 XML。

我的问题是,我不知道如何在 Java 中使用流进行这种转换,而不是先将数据写入 zip 文件,然后再读取它。将数据写入磁盘会使软件速度过慢。 您能给我的任何想法/代码 sn-ps/信息将不胜感激!谢谢 另外,如果您需要我提供更好的解释,我很乐意详细说明。

作为另一种选择,我想知道 XMLReader 是否可以使用 ZipInputStream 作为 InputSource。

    ByteArrayInputStream bis = new ByteArrayInputStream(byteArray);
    ZipInputStream zis = new ZipInputStream(bis);
    InputSource inputSource = new InputSource(zis);

【问题讨论】:

    标签: java xml bytearray xmlreader zipinputstream


    【解决方案1】:

    一个 zip 存档可以包含多个文件。在解析内容之前,您必须将 zip 流放在第一个条目上:

    ByteArrayInputStream bis = new ByteArrayInputStream(byteArray);
    ZipInputStream zis = new ZipInputStream(bis);
    ZipEntry entry = zis.getNextEntry();
    InputSource inputSource = new InputSource(new BoundedInputStream(zis, entry.getCompressedSize()));
    

    BoundedInputStream 类取自 Apache Commons IO (http://commons.apache.org/io)

    【讨论】:

    • 我必须实现 XMLReader 接口吗?另外,是否有另一个更简单的选项,我完全想念,从 zip 文件中检索 xml 文件?
    • 我尝试使用上面的代码sn-p。 ZipEntry 条目为空。
    • 你确定这是一个 zip 文件而不是一个 gzip 文件吗?在这种情况下,GZIPInputStream 会更合适。
    • 嗨,伊曼纽尔,先生,您真是个天才!不幸的是,Java API 没有抛出描述性异常,而且由于 WinRAR 能够以 zip 格式打开它,我认为它是正确的格式。谢谢你,我以后会因为你而知道如何解决这个问题!
    猜你喜欢
    • 2015-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-22
    • 2021-10-10
    • 1970-01-01
    • 2011-12-15
    • 2014-08-05
    相关资源
    最近更新 更多