0

我想提取第三方 Web 服务返回的数据。响应由XmlPullParser. TEXT数据块是单个元素的 Base64 解码。到目前为止,我的解析器包含以下代码:

                assert eventType == XmlPullParser.TEXT;
                content = xpp.getText();

content是提到的数据块。它可以工作,但它可能有 100+ kBytes 长。我需要使用另一个解析器来解析内容:

  1. 解码通过 base64 编码的数据块。结果是一个 zip 文件的图像,其中包含一个压缩文件。

  2. 提取压缩文件的内容——它是 CSV 格式。

  3. 解析 CSV 文件的行并提取数据。

如果我知道 zip 存档图像中文件的名称,是否可以使用 Android/Java 对象动态处理它?(即时——我的意思是不先将其存储到文件中。)或者,我如何以及在哪里创建从 zip 文件内容中提取的临时文件?

4

2 回答 2

2

是的,您可以即时解析这些文件。

byte[] decodedContent = Base64.decode(content, Base64.DEFAULT);

ZipInputStream zipStream = new ZipInputStream(new ByteArrayInputStream(decodedContent));

try{
    ZipEntry entry = null;

    while ((entry = zipStream.getNextEntry()) != null) {

        String fileName = entry.getName();

        ByteArrayOutputStream baos = new ByteArrayOutputStream();

        byte[] buffer = new byte[1024];
        int count;

        while ((count = zipStream.read(buffer)) != -1) {
            baos.write(buffer, 0, count);
        }

        baos.close();
        zipStream.closeEntry();

        byte[] bytes = baos.toByteArray();  

        //Your own code to parse the CSV
        parseCsvFile(fileName, bytes);
    }

}finally{
    zipStream.close();
}
于 2013-09-30T16:03:36.723 回答
1

使用它从 base64 解码: http ://commons.apache.org/proper/commons-codec/apidocs/org/apache/commons/codec/binary/Base64.html

如果您正在为 SDK 8 或更高版本开发,您还可以使用:http: //developer.android.com/reference/android/util/Base64.html

使用它来解压缩解码的 base64:http: //developer.android.com/reference/java/util/zip/ZipInputStream.html

使用 ByteArrayInputStrean 将解压缩与解码的 base64 一起使用:http: //developer.android.com/reference/java/io/ByteArrayInputStream.html

还有更多关于解析 cvs 文件的内容: CSV API for Java

于 2013-09-30T14:43:59.703 回答