Byte Array in Java "dekomprimieren"

Diskutiere Byte Array in Java "dekomprimieren" im Allgemeine Java-Themen Bereich.
N

Nemo2478

Hallo an alle,

ich versuche (bei der Lösung meines Problems noch) gerade einen byte Array zu dekomprimieren, aber genau so wie es die folgende Methode von C# macht:

C#:
public static byte[] Decompress(byte[] data)
        {
            try
            {
                byte[] r = null;

                using (MemoryStream ms = new MemoryStream(data))
                using (Stream s = new InflaterInputStream(ms)) //InflaterInputStream kommt aus der Library ICSharpCode.SharpZipLib.Zip.Compression.Streams
                {
                    List<byte> list = new List<byte>();
                    int count = 0;
                    byte[] b = new byte[8192];

                    while ((count = s.Read(b, 0, 8192)) > 0)
                        list.AddRange(b.Take(count));

                    r = list.ToArray();
                    list.Clear();
                    list = null;
                }

                return r;
            }
            catch { }

            return new byte[] { };
        }
Ich habe versucht, die Methode auf Java zu übersetzen, aber da das Ergebnis einen leeren Array zurückgibt, dachte ich, dass es sich nicht lohnt, meine (verheerende) Übersetzung zu zeigen.

Allerdings sollte es reichen mit dem folgendem Code:
Java:
public static byte[] decompress(byte[] data) throws IOException {
        try (InputStream ms = new ByteArrayInputStream(data);
        InflaterInputStream s = new InflaterInputStream(ms)) {
            return s.readAllBytes();
        }
    }
Das Problem ist aber, dass ich die Methode für Java 7 und ohne externe Libraries brauche. Wäre das möglich oder wird es schwierig?

Liebe Grüße und vielen Dank


PS.: Die Ausgabe von der C#-Methode lautet:
Code:
00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-43-48-41-54-43-48-41-4E-4E-45-4C-00-36-26-D2-37-31-D4-00-00-00-00-4D-41-59-4F-52-45-53-20-44-45-20-33-30-2C-34-30-2C-35-30-00-00
 
H

httpdigest

Die gezeigte Lösung mit InflaterInputStream ist das, was du brauchst. Dein Zusatz "es muss auch mit Java 7 (also ohne InputStream.readAllBytes) und ohne externe third-party Libraries funktionieren" erfüllt z.B. eine Lösung mit ByteArrayOutputStream:
https://stackoverflow.com/questions/1264709/convert-inputstream-to-byte-array-in-java#answer-1264737
Java:
try (InputStream ms = new ByteArrayInputStream(data);
     InflaterInputStream s = new InflaterInputStream(ms);
     ByteArrayOutputStream baos = new ByteArrayOutputStream();) {
    byte[] buf = new byte[8192];
    for (int r = s.read(buf); r != -1; r = s.read(buf))
        baos.write(buf, 0, r);
    return baos.toByteArray();
}
 
N

Nemo2478

Java:
try (InputStream ms = new ByteArrayInputStream(data);
     InflaterInputStream s = new InflaterInputStream(ms);
     ByteArrayOutputStream baos = new ByteArrayOutputStream();) {
    byte[] buf = new byte[8192];
    for (int r = s.read(buf); r != -1; r = s.read(buf))
        baos.write(buf, 0, r);
    return baos.toByteArray();
Ich finde keine Wörter im Wörterbuch, um dir meine Dankbarkeit auszudrücken.

Wie kann ich dir bloß dafür danken?
 
Thema: 

Byte Array in Java "dekomprimieren"

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben