Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

File speichern dauert ewig...

Empfohlene Antworten

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(B);

}

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.

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?

Beim casten ...

BufferedInputStream instream

= (BufferedInputStream)zipFile.getInputStream();

... gibts dann eine java.lang.ClassCastException:java.io.ByteArrayInputStream

...und nu? Noch Vorschläge?

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.

Funzt jetzt alles. Und zwar jetzt in einem Zehntel der Zeit!

Danke.

anstatt nen einzelnen int zu lesen wäre es auch sinnvoller einen byte[]-array zu lesen..länge ~4096

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.

Ich lerne gerne was dazu....

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.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.