2010-12-01 44 views
1

Comment puis-je décompresser une chaîne qui a été compressée par la fonction PHP gzcompress()?Android: décompresser la chaîne qui a été compressée avec PHP gzcompress()

Des exemples complets?

thx

Je l'ai essayé maintenant comme ceci:

public static String unzipString(String zippedText) throws Exception 
{ 
    ByteArrayInputStream bais = new ByteArrayInputStream(zippedText.getBytes("UTF-8")); 
    GZIPInputStream gzis = new GZIPInputStream(bais); 
    InputStreamReader reader = new InputStreamReader(gzis); 
    BufferedReader in = new BufferedReader(reader); 

    String unzipped = ""; 
    while ((unzipped = in.readLine()) != null) 
     unzipped+=unzipped; 

    return unzipped; 
} 

, mais il ne fonctionne pas si je je suis en train de décompresser un gzcompress PHP chaîne (-ed).

Répondre

0
+1

Correction mineure: gzip utilise dégonfler algorithme, mais il ajoute aussi peu d'informations d'en-tête (comme le nom du fichier en cours de compression, les permissions de fichiers), car dégonfler compresse uniquement les données. Deflate est utilisé par d'autres outils, comme les bibliothèques PNG. – StaxMan

7

gzcompress de PHP utilise Zlib pas GZIP

public static String unzipString(String zippedText) { 
    String unzipped = null; 
    try { 
     byte[] zbytes = zippedText.getBytes("ISO-8859-1"); 
     // Add extra byte to array when Inflater is set to true 
     byte[] input = new byte[zbytes.length + 1]; 
     System.arraycopy(zbytes, 0, input, 0, zbytes.length); 
     input[zbytes.length] = 0; 
     ByteArrayInputStream bin = new ByteArrayInputStream(input); 
     InflaterInputStream in = new InflaterInputStream(bin); 
     ByteArrayOutputStream bout = new ByteArrayOutputStream(512); 
     int b; 
     while ((b = in.read()) != -1) { 
      bout.write(b); } 
     bout.close(); 
     unzipped = bout.toString(); 
    } 
    catch (IOException io) { printIoError(io); } 
    return unzipped; 
} 
private static void printIoError(IOException io) 
{ 
    System.out.println("IO Exception: " + io.getMessage()); 
} 
+0

Quand je passe le Jeu de caractères RFC 1951 Il jette Erreur java.io.UnsupportedEncodingException: RFC 1951 –

+0

Ne fonctionne pas ici –