即时解压缩web服务的base64响应?

时间:2013-09-30 14:33:15

标签: android xml-parsing base64 unzip xmlpullparser

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

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

content是提到的数据块。它可以工作,但它可以超过100千字节。我需要使用另一个解析器解析内容:

  1. 解码通过base64编码的数据块。结果是一个zip文件的图像,里面有一个压缩文件。

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

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

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

2 个答案:

答案 0 :(得分: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();
}

答案 1 :(得分: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将unzip与解码的base64一起使用: http://developer.android.com/reference/java/io/ByteArrayInputStream.html

以下是解析cvs文件的更多内容: CSV API for Java