GZipInputstream wirft ZipException

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • GZipInputstream wirft ZipException

    Ich hatte unter Java:

    Java-Quellcode

    1. ByteArrayInputStream is = new ByteArrayInputStream(gzippedByteArray);
    2. GZIPInputStream gis = new GZIPInputStream(is, 32);
    3. StringBuilder stringBuilder = new StringBuilder();
    4. byte[] data = new byte[32];
    5. int bytesRead;
    6. while ((bytesRead = gis.read(data)) != -1) {
    7. stringBuilder.append(new String(data, 0, bytesRead));
    8. }
    9. gis.close();
    10. is.close();

    was ich nach Kotlin umgewandelt habe:

    Java-Quellcode

    1. val `is` = ByteArrayInputStream(this.toByteArray(Charsets.UTF_8))
    2. val gis = GZIPInputStream(`is`, 32)
    3. val string = StringBuilder()
    4. val data = ByteArray(32)
    5. var bytesRead: Int
    6. while (gis.read(data) != -1) {
    7. string.append(String(data))
    8. }
    9. gis.close()
    10. `is`.close()
    Aber irgendwie wirft es immer eine
    java.util.zip.ZipException: Not in GZIP format ?!

    Jemand einen Hinweis was ich falsch mache?

    Thnx und gruß
    T

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von tranqiullo ()

  • Hallo
    eine Frage was soll 'is' denn sein glaube nicht das ein bezeichner mit einen ( ' ) anfangen darf.
    Ich denke auch das "data" ein var sein müsste, denn du willst doch doch immer wieder Daten in deiner while Schleife rein schreiben.



    Ok ‚is‘ geht, Kotlin akzeptier auch dieses Zeichen für Bezeichner.
    Auch sollte das mit dem val bei data ok sein denn es ist ja ein Objekt (Klasse Instanz).


    Aber mit den this bei val `is` = ByteArrayInputStream(this.toByteArray(Charsets.UTF_8))

    bin ich nicht ganz ein verstanden.
    Ich denke du hast keine Member Funktion mit dem Namen die einen Buffer zrückgibt.


    Du willst doch einen Buffer in ein Zip Objekt haben oder? Wo ist dein Buffer den ByteArrayInputStream haben will?


    du brauchst einen Buffer, String … den du übergiebst und mit toBytArray zu einen ByteArray machst.


    var buf = "hallo"
    val `is` = ByteArrayInputStream(buf.toByteArray(Charsets.UTF_8)) zB.

    oder wie in den Java teil übergebe gleich den Buffer der bei dier wohl gzippedByteArray heißt.

    val `is` = ByteArrayInputStream(gzippedByteArray)
    val `is` = ByteArrayInputStream(gzippedByteArray.toByteArray(Charsets.UTF_8))

    Die Syntax ist wirklich Gewöhnungsbedürftig muss da auch immer erst dreimal um die Ecke Denken.

    Hoffe das Hilft weiter.
    Ein Feedback auf Tipps ist auch schön. :P

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von jogimuc ()

  • jogimuc schrieb:

    versuche es mal in etwa so

    Quellcode

    1. // var gzippedByteArray = ByteArray(100)
    2. val gis = GZIPInputStream(gzippedByteArray.inputStream())
    3. val buf = gis.bufferedReader(UTF_8)
    4. val data={buf : BufferedReader -> buf.readText() }
    Jupp, habe:

    Java-Quellcode

    1. fun ByteArray.unzip(): String =
    2. GZIPInputStream(this.inputStream()).bufferedReader(UTF_8).use { it.readText() }
    und bekomme nun java.util.zip.ZipException: invalid bit length repeat
  • Hi was hast du immer mit deinen this ?
    Du willst einer Klasse eine Methode hinzufügen, erweitern.


    Da würde mich mal dein Aufruf der neuen Methode Interessieren.

    Wenn du es in einer kompakten Funktion haben willst dann bitte so.



    Quellcode

    1. fun unzip(zipArray: ByteArray): String =
    2. GZIPInputStream(zipArray.inputStream()).bufferedReader(UTF_8).use { it.readText() }
    Ein Feedback auf Tipps ist auch schön. :P
  • jogimuc schrieb:

    Hi was hast du immer mit deinen this ?
    Du willst einer Klasse eine Methode hinzufügen, erweitern.
    Das war eine extension function auf ByteArray, mit this referenziert man das aufrufende Objekt in einer Extension function:

    Quellcode

    1. fun ByteArray.foo(){
    2. //..this ist mein Aufrufendes ByteArray
    3. println(this.size)
    4. }
    5. //..
    6. val myByteArray = {1,1,1} as ByteArray
    7. myByteArray.foo() // 3