Bytearray iist zip? (magic numbers)

  • Hey Leute


    ich habe von einer url etwas als byte[] heruntergeladen. Im besten fall ist dies eine zip datei.
    Genau das will ich überprüfen. Der einfachste weg der sich aber als kompliziert herausstellte ist
    die ersten 5 bytes (magic number) zu lesen, die wie ich aus recherchen habe eine identifikationsnummer für Dateitypen sein soll.
    Mein problem ist jedoch das ich unbekannte zeichen herausbekomme. -> (PK����Æ^6N���)
    Ich habe auch schon andere Charsets versucht, aber es kamm bis her immer das gleiche unlesbare Zeug.


    Hier mein short code:

    Code
    Log.i(TAG, new String(byteZip, StandardCharsets.UTF_8));

    Falls jemand eine idee hat oder auch eine alternative lösung, bitte her damit. =D

  • Am besten erstellst du aus deinem Byte-Array erstmal eine Datei (oder noch besser, du schreibst beim Download schon eine Datei), gerade bei größen Zips nutzt/blockierst du durch dein Byte-Array natürlich viel Arbeitsspeicher (ist die Zip größer als dein Arbeitsspeicher, wirst du so auf Fehler stoßen).


    Nachdem du die Datei geschrieben hast, kannst du mit der ZipFile-Klasse (https://docs.oracle.com/javase…ava/util/zip/ZipFile.html) in Java überprüfen, ob die Zip funktionert/valide ist.


    Noch besser wäre es wenn du einen Checksum-Prüfung einbaust (dafür muss dir der Server allerdings die Checksum mitteilen), dann wüsstest du ob die Datei wirklich korrekt runtergeladen wurde.


    Bytes kannst du übrigens nicht zuverlässig als String darstellen, dort wirst du immer so "unbekannte" Zeichen rausbekommen.

  • Hallo
    Das was du hast ist ja kein String sondern ein Byte Array.
    Wie du richtig sagst kann man ein Zip an dem Anfang erkennen der ist PK und dann kommen angaben in Hex.
    https://www.hummel1.de/prog/zipview/zipstruc.htm


    Schaue dir mal ein Zip mit einen Hex-Editor an.


    Die Bytes nach den ersten Zwei „PK“ sind keine Charter die im ASCII Code ein Zeichen oder Buchstaben entspricht, deshalb die komischen Zeichen. Die du als Platzhalter sehen kannst.
    Weil das keine Druckbaren, Anzeigbaren Zeichen sind. Der hex wert ist trotzdem vorhanden.


    In Punkto Speicherverbrach hat @Xcreen natürlich recht. Wenn es nur wenige Bytes sind und nicht erst eine Datei erstellen willst, du das Array am Anfang auf das „PK“ prüfen willst dann in etwa so.



  • Aus irgendeinem Grund habe ich das mit dem String übersehen.
    Natürlich werden die nicht als konkrete Zeichen angezeigt. *facepalm*


    Die Lösung funktioniert nun so, vielen dank.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!