我想提取第三方Web服务返回的数据。响应由XmlPullParser
解析。数据块是单个元素的Base64解码TEXT
。到目前为止,我的解析器包含代码:
assert eventType == XmlPullParser.TEXT;
content = xpp.getText();
content
是提到的数据块。它可以工作,但它可以超过100千字节。我需要使用另一个解析器解析内容:
解码通过base64编码的数据块。结果是一个zip文件的图像,里面有一个压缩文件。
提取压缩文件的内容 - 它是CSV格式。
解析CSV文件的行并提取数据。
如果我知道zip存档图像中文件的名称,是否可以使用Android / Java对象动态处理它? (动态 - 我的意思是不首先将其存储到文件中。)或者,我如何以及在何处创建从zip文件内容中提取的临时文件?
答案 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