ZIP -> GZIP

Status
Nicht offen für weitere Antworten.

TheJavaKid

Top Contributor
hi @ all

ich habe folgenden code:

Code:
        int read = 0;
        FileInputStream in;
        byte[] data = new byte[4096];
        try {
          System.out.println(savePath);
          // Zip-Archiv mit Stream verbinden
          ZipOutputStream out =
            new ZipOutputStream(new FileOutputStream(savePath+".zip"));
          // Archivierungs-Modus setzen
    //      out.setMethod(ZipOutputStream.DEFLATED);
          // Hinzufügen der einzelnen Einträge
          for (int i=0; i < files.length; i++) {
            // Eintrag für neue Datei anlegen
            System.out.println(files[i]);
            ZipEntry entry = new ZipEntry(new File(files[i].toString()).getName());
            in = new FileInputStream(files[i].toString());
            // Neuer Eintrag dem Archiv hinzufügen
            out.putNextEntry(entry);
            // Hinzufügen der Daten zum neuen Eintrag
            while((read = in.read(data, 0, 4096)) != -1)
              out.write(data, 0, read);
            out.closeEntry(); // Neuen Eintrag abschließen
            in.close();
          }
          out.close();

wie würde das aussehen wenn ich das ganze im GZIP haben will?

ich mein ich habs schon hingekriegt dass der GZIPOutputStream geht... aber der hat die datei irgendwo ersteöllt und für jede datei die ich mit den GZIPOutputStream zippen wollte ne eigene .gz datei erstellt..

also meine frage:
wie würe dieser code jtzt mit GZIP satt Zip aussehen? sodass er genau die selben funktionen hat wie dieses beispiel hier... THX
 
A

Anmeldeboykottierer

Gast
Hackl hat gesagt.:
wie würde das aussehen wenn ich das ganze im GZIP haben will?

ich mein ich habs schon hingekriegt dass der GZIPOutputStream geht... aber der hat die datei irgendwo ersteöllt und für jede datei die ich mit den GZIPOutputStream zippen wollte ne eigene .gz datei erstellt..

also meine frage:
wie würe dieser code jtzt mit GZIP satt Zip aussehen? sodass er genau die selben funktionen hat wie dieses beispiel hier... THX

HI,
was du hier möchtest ist nicht möglich. GZip kann nur eine einzelne Datei packen. In der Unix Welt findest du deswegen auch immer gepackte tar Files (wobei dort auch GZip rückläufig ist). Jedenfalls musst du erst einen Container erstellen, der die Dateien aufnimmt und diesen dann packen oder gleich ein anderes Format bemühen (warum gzip?)

Gruß Der Anmeldeboykottierer
 

TheJavaKid

Top Contributor
asoo

aber mehrere dateien in einen ordner zu stecken und diesen ordner dann in die gzip datei zu stecken is aber schon möglich oder?
 
A

Anmeldeboykottierer

Gast
Also nochmal ganz einfach erklärt, stell dir gzip wie eine Pipe vor (wie komm ich nur auf den Vergleich?)
Du steckst einen Stream von Bytes rein und bekommst hinten diesen Stream gepackt raus. GZip macht nichts anderes. Was in dem Stream(/Array) steht ist GZip egal. Wenn du jetzt also alle Dateien die du packen möchtest aneinander reihst, hast du nur ein größeres Byte Array, dass kannst du packen. Beim auspacken bekommst du dann aber auch nur ein Array von Byte. Wie du dieses interpretierst ist deine Sache. Wenn du einen Ordner packst, dann packst du nicht die Metainformationen des Dateisystems. Du brauchst einen Container, der diese Metainformationen aufnimmt. Ein Tar (oder ein ungepacktes Jar) übernimmt genau diese Aufgabe. Da werden die Dateien einfach ungepackt reingeschrieben, es wird aber auch ein "Inhaltsverzeichnis" erstellt, dass hier den Namen und die Position/Größe speichert.
Die eigentliche Datei ist dann grob so aufgebaut, dass man ein wenig Metainfos zur Datei hat (magic-number, größe, byteorder, whatever) dann eine Art Inhaltsverzeichnis (Anzahl der Einträge und Offsets oder halt Art des ersten Eintrags + Größe, zweiter Eintrag liegt dann genau Größe Bytes dahinter und hat die gleiche form).
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben