C # Java: Base64String, Memorystream, GZipStream
-
05-07-2019 - |
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.
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.