Frage

Ich habe eine Base64 Zeichenfolge, die in .NET gzipped worden sind, und ich möchte es in einen String konvertieren zurück in Java. Ich bin auf der Suche für einige Java-Äquivalente auf die C # Syntax, insbesondere:

  • Convert.FromBase64String
  • Memory
  • GZipStream

Hier ist die Methode Ich mag würde konvertieren:

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);
     }
}

Alle Hinweise sind willkommen.

War es hilfreich?

Lösung

Für Base64, haben Sie die Base64 Klasse von Apache Commons, und die decodeBase64 Verfahren, das eine String nimmt und gibt einen byte[].

Dann können Sie das resultierende byte[] in eine ByteArrayInputStream . Schließlich passieren die ByteArrayInputStream an ein GZipInputStream und lesen Sie das unkomprimierte Bytes.


Der Code sieht aus wie etwas in diese Richtung:

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");
}

Ich habe den Code nicht testen, aber ich denke, es sollte funktionieren, vielleicht mit ein paar Änderungen.

Andere Tipps

Für Base64, empfehle ich iHolder Implementierung .

GZipinputStream ist, was man eine GZIP Byte-Array dekomprimieren müssen.

ByteArrayOutputStream ist, was Sie verwenden, um Bytes in den Speicher zu schreiben. Sie dann die Bytes erhalten und sie an den Konstruktor eines String-Objekt übergeben sie konvertieren, vorzugsweise die Codierung angeben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top