2013-09-30 1 views
0

제 3 자 웹 서비스에서 반환 한 데이터를 추출하고 싶습니다. 응답은 XmlPullParser에 의해 구문 분석됩니다. 데이터 블록은 Base64 디코딩 TEXT 단일 요소입니다. 지금까지 파서에는 다음 코드가 포함되어 있습니다.즉석에서 웹 서비스의 base64 응답 압축을 풉니 다?

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

content은 위에서 언급 한 데이터 블록입니다. 작동하지만 100 + kB 길이가 될 수 있습니다.

  1. base64를 통해 인코딩 된 데이터 블록을 디코딩합니다. 다른 파서를 사용하여 내용을 파싱해야합니다. 결과는 하나의 압축 파일이 들어있는 zip 파일의 이미지입니다.

  2. 압축 된 파일의 내용을 추출합니다. CSV 형식입니다.

  3. CSV 파일의 행을 구문 분석하고 데이터를 추출하십시오.

zip 아카이브 이미지에서 파일 이름을 알고 있다면 Android/Java 객체를 사용하여 즉시 처리 할 수 ​​있습니까? (즉석에서 - 먼저 파일에 저장하지 않고 말입니다.) 또는 zip 파일 내용에서 추출한 임시 파일을 어디에서 어떻게 만들 수 있습니까? 64 기수에서 디코딩

답변

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(); 
} 
+0

'zipStream.getNextEntry()'에 문제가 있습니다. 그 때문에 나는'catch (IOException e) {System.out.println (e.getMessage());를 추가했다. }'. 그것은 로컬 헤더 버전 45를 읽을 수 없습니다. (내 의자와 키보드 사이에 약간의 버그가 있습니다.)'decodedContent'를 Download/output.zip'에 저장했고 Android 용 총 사령관이 파일을 추출 할 수 있습니다. 무엇이 문제 일 수 있습니까? – pepr

+0

답변을 찾았습니다. http://stackoverflow.com/a/15566221/1346705. 나는 아마도 똑같은 상황에 처해있을 것이다. 코드를 보내 주셔서 감사합니다. – pepr

1

사용이 : http://commons.apache.org/proper/commons-codec/apidocs/org/apache/commons/codec/binary/Base64.html

당신이 SDK 8 이상에 대한 개발하는 경우 당신은 또한 사용할 수 있습니다 http://developer.android.com/reference/java/util/zip/ZipInputStream.html

: http://developer.android.com/reference/android/util/Base64.html

사용이 디코딩 base64로 압축을

ByteArrayInputStrean을 사용하여 디코딩 된 base64와 함께 압축 해제를 사용하십시오. http://developer.android.com/reference/java/io/ByteArrayInputStream.html

다음은 cvs 파일을 구문 분석하는 방법에 대한 것입니다. CSV API for Java

+1

SDK는이 Base64로 디코더 내장되어 있습니다 : http://developer.android.com/reference/android/util/Base64.html –

+1

네하지만 API 레벨 8 이상. 그에 따라 내 대답이 바뀌 었습니다. –

관련 문제