tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
5
ZUGRIFFE
1060
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von zerix
    zerix zerix ist offline Hausmeister
    tutorials.de Moderator
    Registriert seit
    May 2005
    Beiträge
    4.335
    Hallo!

    Gibt es eine Möglichkeit eine Zip-Datei nicht aus der Datei zu lesen, sondern aus einem ByteArray. Also ich hab die Datei nicht auf der Festplatte sondern in einem ByteArray. Mit ZIpFile kann ich nur Dateien öffnen die sich auf der Festplatte befinden und nicht aus einem ByteArray lesen. Kann mit einer helfen?


    MFG zerix
     

  2. #2
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.886
    Blog-Einträge
    29
    Hallo!

    Schau mal hier:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    
     package de.tutorials;
     
     import java.io.ByteArrayInputStream;
     import java.io.File;
     import java.io.FileInputStream;
     import java.io.FileOutputStream;
     import java.util.zip.ZipEntry;
     import java.util.zip.ZipInputStream;
     
     public class ByteArrayBasedZipExample {
     
        /**
         * @param args
         */
        public static void main(String[] args) throws Exception {
            File file = new File("c:/sonnenBlume.zip");
            byte[] buffer = new byte[(int) file.length()];
     
            FileInputStream fis = new FileInputStream(file);
            fis.read(buffer);
            fis.close();
     
            ZipInputStream zis = new ZipInputStream(
                    new ByteArrayInputStream(buffer));
     
            ZipEntry entry = null;
            byte[] entryBuffer = new byte[8192];
            int len = 0;
            while ((entry = zis.getNextEntry()) != null) {
                File entryFile = new File("c:/", System.currentTimeMillis()
                        + entry.getName());
                FileOutputStream fos = new FileOutputStream(entryFile);
                while ((len = zis.read(entryBuffer)) > 0) {
                    fos.write(entryBuffer, 0, len);
                }
                fos.flush();
                fos.close();
            }
     
            zis.close();
     
        }
     }

    gruß Tom
     
    Java rocks!
    How to become a good Java Programmer?
    Does IT in Java and .Net
    The only valid measurement of code quality: WTFs / minute
    Blog
    Xing
    Twitter

  3. #3
    Avatar von zerix
    zerix zerix ist offline Hausmeister
    tutorials.de Moderator
    Registriert seit
    May 2005
    Beiträge
    4.335
    Danke Tom!!
    Aber jetzt steh ich vor dem nächsten Problem. Mit deinem Quelltext kann ich die ganze ZipFile entpacken, aber wie kann ich jetzt ein bestimmtes entry entpacken. Es gibt ja leider nur die Methode nextEntry bei dem ZipInputStream.
     

  4. #4
    Avatar von zerix
    zerix zerix ist offline Hausmeister
    tutorials.de Moderator
    Registriert seit
    May 2005
    Beiträge
    4.335
    ICh hab mal ne Idee. Ich hoffe das es funktioniert.
     

  5. #5
    mmueller78 mmueller78 ist offline Grünschnabel
    Registriert seit
    Jun 2007
    Beiträge
    4
    Hallo!

    Das Beispiel von Thomas klappt soweit bei mir, nur wenn die Dateien in der Zip-Datei etwas größer werden (hab es mit einer ca 50 MB großen Datei versucht) bekomme ich eine Exception geworfen:

    java.lang.OutOfMemoryError: Java heap space
    at java.util.Arrays.copyOf(Unknown Source)
    at java.io.ByteArrayOutputStream.write(Unknown Source)

    Ich denke mal, dass intern ein Vector von bytes benutzt wird und der irgendwann zu groß wird und nicht mehr verarbeitet werden kann.

    Gibt es eine andere Möglichkeit das zu realisieren. Kann mir dabei jemand helfen?
     

  6. #6
    Avatar von zerix
    zerix zerix ist offline Hausmeister
    tutorials.de Moderator
    Registriert seit
    May 2005
    Beiträge
    4.335
    Hallo,

    da hast du aber einen meiner ersten Beiträge in diesem Forum gefunden.

    Du bekommst einen OutOfMemoryError, weil der Java-Speicher voll ist. Dieser beträgt soweit ich weiß Standard-mäßig 64 MB. Wenn du dann natürlich 50 MB von einer Datei schon im Speicher hast, ist das recht schell voll.
    Eine Möglichkeit wäre, wenn du einfach den Java-Speicher erhöhst.

    Code :
    1
    
    java -Xmx256m MyApp

    Eine weitere Möglichkeit wäre vielleicht (da ich nicht weiß was du machst), wenn du es nicht in den Speicher schreibst, sondern in ein Temp-File auf die Platte, dann ist die Speicherauslastung nicht so hoch.

    MFG

    zEriX
     
    Es ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)

Ähnliche Themen

  1. Antworten: 12
    Letzter Beitrag: 13.04.10, 18:39
  2. Antworten: 11
    Letzter Beitrag: 02.04.08, 21:17
  3. Zipfile erstellen
    Von magic_halli im Forum Java
    Antworten: 1
    Letzter Beitrag: 09.11.07, 14:47
  4. Objekt zu ByteArray
    Von Snowcrack im Forum .NET Datenverwaltung
    Antworten: 6
    Letzter Beitrag: 19.09.07, 16:01
  5. ByteArray wegschreiben
    Von Reen_sc im Forum Java
    Antworten: 0
    Letzter Beitrag: 25.10.06, 15:54