18. Oktober 200619 j 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.
18. Oktober 200619 j Benutze mal anstelle eines InputStreams einen BufferedInputStream. Das kann schon mal Wunder wirken.
18. Oktober 200619 j 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?
18. Oktober 200619 j Beim casten ... BufferedInputStream instream = (BufferedInputStream)zipFile.getInputStream(); ... gibts dann eine java.lang.ClassCastException:java.io.ByteArrayInputStream ...und nu? Noch Vorschläge?
18. Oktober 200619 j 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.
19. Oktober 200619 j anstatt nen einzelnen int zu lesen wäre es auch sinnvoller einen byte[]-array zu lesen..länge ~4096
19. Oktober 200619 j 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.
19. Oktober 200619 j 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
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.