Question

J'ai une chaîne Base64 gzippée en .NET et j'aimerais la reconvertir en chaîne en Java. Je recherche des équivalents Java à la syntaxe C #, notamment:

  • Convert.FromBase64String
  • MemoryStream
  • GZipStream

Voici la méthode que j'aimerais convertir:

public static string Decompress(string zipText) {
    byte[] gzipBuff = Convert.FromBase64String(zipText);

    using (MemoryStream memstream = new MemoryStream())
    {
        int msgLength = BitConverter.ToInt32(gzipBuff, 0);
        memstream.Write(gzipBuff, 4, gzipBuff.Length - 4);

        byte[] buffer = new byte[msgLength];

        memstream.Position = 0;
        using (GZipStream gzip = new GZipStream(memstream, CompressionMode.Decompress))
        {
            gzip.Read(buffer, 0, buffer.Length);
        }
        return Encoding.UTF8.GetString(buffer);
     }
}

Tous les indicateurs sont appréciés.

Était-ce utile?

La solution

Pour Base64, vous avez le Base64 class d'Apache Commons et la méthode decodeBase64 qui prend une String et retourne un octet [] .

Ensuite, vous pouvez lire le octet [] résultant dans un ByteArrayInputStream . Enfin, transmettez ByteArrayInputStream à un GZipInputStream et lisez les octets non compressés.

Le code ressemble à quelque chose du genre:

public static String Decompress(String zipText) throws IOException {
    byte[] gzipBuff = Base64.decodeBase64(zipText);

    ByteArrayInputStream memstream = new ByteArrayInputStream(gzipBuff);
    GZIPInputStream gzin = new GZIPInputStream(memstream);

    final int buffSize = 8192;
    byte[] tempBuffer = new byte[buffSize ];
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    while ((size = gzin.read(tempBuffer, 0, buffSize)) != -1) {
        baos.write(tempBuffer, 0, size);
    }        
    byte[] buffer = baos.toByteArray();
    baos.close();

    return new String(buffer, "UTF-8");
}

Je n'ai pas testé le code, mais je pense que cela devrait fonctionner, peut-être avec quelques modifications.

Autres conseils

Pour Base64, je recommande la l'implémentation de iHolder .

GZipinputStream est ce dont vous avez besoin pour décompresser un tableau d'octets GZip.

ByteArrayOutputStream est ce que vous utilisez pour écrire des octets dans la mémoire. Vous obtenez ensuite les octets et les transmettez au constructeur d’un objet chaîne pour les convertir, en spécifiant de préférence le codage.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top