The_red_one Geschrieben 18. Oktober 2006 Geschrieben 18. Oktober 2006 Problem: Es wird ein File per Upload über eine .jsp in ein FormFile gepackt. Auf dem FormFile kannich nur eine InputStream holen. Das soll dann gespeichert werden über eine FileOutputStream. Und 80MB dauern über 10 Minuten... ist das normal oder was ist falsch gelaufen? private String saveFile(FormFile zipFile, String kommission, long id) { ..... int b; FileOutputStream fileoutstream = new FileOutputStream(filename); InputStream instream = zipFile.getInputStream(); while( (b = instream.read()) != -1 ) { fileoutstream.write(; } instream.close(); fileoutstream.flush(); fileoutstream.close(); ..... } Das Ganze spiel sich bei mir lokal aufm Rechner ab. Also schließe ich Netzprobleme aus. (die kommen erst später hinzu ) Danke schon mal im Voraus.
etreu Geschrieben 18. Oktober 2006 Geschrieben 18. Oktober 2006 Benutze mal anstelle eines InputStreams einen BufferedInputStream. Das kann schon mal Wunder wirken.
The_red_one Geschrieben 18. Oktober 2006 Autor Geschrieben 18. Oktober 2006 Wie soll das gehen... wenn ich dann schreibe BufferedInputStream instream = zipFile.getInputStream(); passen die Types nicht zusammen. getInputStream() liefert einen Input Stream und keinen buffered. Einen anderen Stream kann ich aus dem FormFile nicht rausholen. Irgendwie casten? Geht das? Nutz das was? Ich probiers mal aus... sollte der output dann wohl auch besser buffered sein, oder? Geht das mit FileOutputStream überhaupt buffered?
The_red_one Geschrieben 18. Oktober 2006 Autor Geschrieben 18. Oktober 2006 Beim casten ... BufferedInputStream instream = (BufferedInputStream)zipFile.getInputStream(); ... gibts dann eine java.lang.ClassCastException:java.io.ByteArrayInputStream ...und nu? Noch Vorschläge?
perdian Geschrieben 18. Oktober 2006 Geschrieben 18. Oktober 2006 Wie soll das gehen... Ein wenig Beschäftigung mit DesignPatterns in Kombination mit dem Lesen der Java API wirkt bei sowas manchmal Wunder. Ganz konkret: Nartürlich kannst du nicht jeden InputStream in einen BufferedInputStream casten, aber durchaus als solchen dekorieren: BufferedInputStream inStream = new BufferedInputStream(zipFile.getInputStream()); Analoges gilt für OutputStreams.
The_red_one Geschrieben 18. Oktober 2006 Autor Geschrieben 18. Oktober 2006 Funzt jetzt alles. Und zwar jetzt in einem Zehntel der Zeit! Danke.
ksg9-sebastian Geschrieben 19. Oktober 2006 Geschrieben 19. Oktober 2006 anstatt nen einzelnen int zu lesen wäre es auch sinnvoller einen byte[]-array zu lesen..länge ~4096
geloescht_Newlukai Geschrieben 19. Oktober 2006 Geschrieben 19. Oktober 2006 Funzt jetzt alles. Und zwar jetzt in einem Zehntel der Zeit! Danke. Falls Dich auch interessiert warum: Du hast Byte für Byte aus einem Zip-File gelesen. Für das Programm heißt das ganz grob: ZipFile öffnen, Byte lesen, ZipFile schließen. Und Du kannst Dir denken, daß das Öffnen und Lesen länger dauert als bei einer normalen Datei. Daher verwendest Du jetzt den buffered stream. Der liest nämlich gleich ein paar hundert Bytes statt nur einem.
The_red_one Geschrieben 19. Oktober 2006 Autor Geschrieben 19. Oktober 2006 Ich lerne gerne was dazu....
ksg9-sebastian Geschrieben 19. Oktober 2006 Geschrieben 19. Oktober 2006 joar...genau deshalb nicht byte-für-byte lesen sondern immer ne menge an bytes in nen puffer schreiben. wie ich oben schon erwähnt hab
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden