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. Zitieren
etreu Geschrieben 18. Oktober 2006 Geschrieben 18. Oktober 2006 Benutze mal anstelle eines InputStreams einen BufferedInputStream. Das kann schon mal Wunder wirken. Zitieren
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? Zitieren
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? Zitieren
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. Zitieren
The_red_one Geschrieben 18. Oktober 2006 Autor Geschrieben 18. Oktober 2006 Funzt jetzt alles. Und zwar jetzt in einem Zehntel der Zeit! Danke. Zitieren
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 Zitieren
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. Zitieren
The_red_one Geschrieben 19. Oktober 2006 Autor Geschrieben 19. Oktober 2006 Ich lerne gerne was dazu.... Zitieren
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 Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.