0

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

包含 XML 的对象将数据作为 zipFile 的 byteArray 返回,如下所示。

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

//上面返回一个zipFile的byteArray

我检查的方式是将 byteArray 写入 String

    String str = new String(byteArray); 

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

然后我将数据写入文件。

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

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

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

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

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

1 回答 1

3

A zip archive can contain several files. You have to position the zip stream on the first entry before parsing the content:

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

The BoundedInputStream class is taken from Apache Commons IO (http://commons.apache.org/io)

于 2011-07-21T19:11:23.457 回答