Performance Lesen und Schreiben aus/in Streams

Status
Nicht offen für weitere Antworten.

virtualAudio

Aktives Mitglied
Hi,

ich habe eine KLasse die ich Filestreamer nenne und für alles mögliche verwende (downloaden von daten, entschlüsseln/verschlüsseln, etc).
Ich frage mich, ob jemand Erfahrung hat wie man dieses Ding vielleicht noch schneller bekommt. Das Original ist viel länger und einige Debuginformatinen die pro Schleifenwiederholungen ausgegeben werden sind vermutlich mehr verantwortlich für eine langsamere Performance als dieser Kern an sich. Trotzdem würde mich interessieren ob jemand die Erfahrung gemacht hat, dass es anders schneller geht. Mir fällt garkeine andere Möglichkeit ein nur über die Buffergröße könnte ich mir vorstellen, dass da noch was zu holen ist. Weiß da jemand mehr? Ich hab etwas Zeitdruck und würde bevor ich groß zu Testen beginne gerne wissen ob es eine generelle Meinung/Taktik gibt...sowas wie..."je größer der Buffer, desto schneller, falls...".

also der Kern der Sache sieht etwa so aus:

Code:
    PrintStream ps;
    InputStream is = null;
    
    byte[] buf = new byte[2048];  // <- wer weiß was zum Thema Performance?
    boolean volatile end = false;
    int n;
    
    
    /*
    *   zB für download:
    
    *   URLConnection conn = url.openConnection();
    *   in = conn.getInputStream();
    */
    
    
    try {
        while ((n = is.read(buf)) > 0    &&  !end) {
            ps.write(buf, 0, n);
        }
    } catch (Exception e) {
    } finally {
        is.close();
    }

Für jeden Tipp oder Gedankengang bin ich dankbar
mfg Andi
 

Wildcard

Top Contributor
Ab einigen KiB ist Java NIO (FileChannel/ByteBuffer) wesentlich schneller als 'klassische' Streams
 

virtualAudio

Aktives Mitglied
Vielleicht interessiert es jemanden.

Ich hab ein paar Tests gemacht und die beiden Ansätze verglichen. Außerdem habe ich mit der Buffergröße variiert.

Ich will also möglichst schnell von einem InputStream is in einen PrintStream ps schreiben.


Ansatz 1 - Der (auch an anderen Stellen im web) empfohlene Ansatz:
Code:
	ReadableByteChannel fcIn = Channels.newChannel(is);
	WritableByteChannel fcOut = Channels.newChannel(ps);
	ByteBuffer buf = ByteBuffer.allocateDirect(BUFFERSIZE); 
	
	buf.clear();
	while((n = fcIn.read(buf))!=-1){
		
		buf.flip();
		fcOut.write(buf);
		buf.compact();   // In case of partial write
	}



Ansatz 2 - Der vermeintlich "alte" Ansatz:
Code:
	byte[] buf = new byte[BUFFERSIZE];

	while ((n = is.read(buf)) > 0 && !end) { /* , offset, len */
		ps.write(buf, 0, n);
	}


Kopiert habe ich ein 20mb txt-file von/auf HD.

Also was interessant war und mich noch zum Krübeln bringt war die Tatsache, dass Ansatz 2 bei mir bessere Werte geliefert hat. Beide Ansatze sind extrem stark von der Wahl der Buffergröße abhängig (ca. bei 2^16bytes gibt es die besten Werte, darüber und darunter wird die Sache teilweise schnell schlechter).

Ein paar ausgewählte Ergebnisse:

Buffersize -> Dauer

Ansatz 1:

2^10 -> ~350ms
2^15-2^19 -> ~120-140ms
2^25 -> ~170ms


Ansatz 2:

2^10 -> ~290ms
2^16 -> ~80-90ms (minimum)
2^25 -> ~800ms


Die Tests hab ich jeweils mind. 5x laufen lassen. Es gibt selten aber doch auch mal Ausreißer nach oben.

Ich bin schon ganz glücklich die Zeit von ~600ms zuvor auf jetzt 80ms verbessert zu haben. Aber die Tatsache, dass der (überall als besser bekannte) Ansatz1 bei mir langsamer ist lässt mich auch noch auf mehr hoffen. Ich bin zufrieden, aber vielleicht geht ja noch was.

lg Andi
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
O HashTable kann ohne Performance-Verlust in Multithreaded-Anwendungen eingesetzt werden. Java Basics - Anfänger-Themen 6
N Java-Performance messen Java Basics - Anfänger-Themen 1
B Performance-Vergleich mit C++ Java Basics - Anfänger-Themen 55
P Priority Queue Performance Java Basics - Anfänger-Themen 3
P Performance Array und Liste Java Basics - Anfänger-Themen 13
S Performance von byte[], short[], int[]..? Java Basics - Anfänger-Themen 24
I Erste Schritte Resource Bundle - Alles in einem File oder mehrere? => Faktor Performance Java Basics - Anfänger-Themen 2
E Hilfe zur Performance Verbesserung gesucht Java Basics - Anfänger-Themen 1
G Performance - höhere Anzahl Swing Elemente Java Basics - Anfänger-Themen 5
S Performance-/Stress Test für Webanwendung Java Basics - Anfänger-Themen 2
R Datei kopieren: Performance erhöhen Java Basics - Anfänger-Themen 10
S Wie performance lastig sind rekursionen Java Basics - Anfänger-Themen 13
N Bessere Performance durch final: wann denn überhaupt? Java Basics - Anfänger-Themen 28
J Softwaresynthesizer Performance? Java Basics - Anfänger-Themen 11
I Anzahl einer Liste (Performance) Java Basics - Anfänger-Themen 2
J Performance Vergleich von if-Abfragen mit mehreren Bedingungen Java Basics - Anfänger-Themen 9
S Performance HashMap<=>Array Java Basics - Anfänger-Themen 17
J Arrays erweitern - Performance vs Speicherverbrauch Java Basics - Anfänger-Themen 6
M Einträge in Dateien zählen - Performance-Problem Java Basics - Anfänger-Themen 10
S unterschied in performance Java Basics - Anfänger-Themen 4
hdi Worst-Performance-Award für Arbeiten mit ListModel Java Basics - Anfänger-Themen 7
hdi Performance Frage (Threads,Swing) Java Basics - Anfänger-Themen 4
C große Matrizen, Performance, (Pointer?) Java Basics - Anfänger-Themen 6
G import .; - Speicherauslastung, Performance Java Basics - Anfänger-Themen 14
G Performance Java Basics - Anfänger-Themen 18
C Performance IO vs. NIO Java Basics - Anfänger-Themen 5
S dynamic arrays/ performance Java Basics - Anfänger-Themen 2
RaoulDuke Arbeitsweise / Speichernutzung / Performance Java Basics - Anfänger-Themen 10
A Hilfe beim Lesen von Pfaden und Systemvariablen Java Basics - Anfänger-Themen 3
I API - zurückgegebener JSON String lesen und in Entity konvertieren Java Basics - Anfänger-Themen 2
Say 2-DIM Array Code lesen und verstehen Java Basics - Anfänger-Themen 5
N Textdatei aus Resourcen-Ordner eines Projekts/ jar-file lesen Java Basics - Anfänger-Themen 4
W Timestamp lesen Java Basics - Anfänger-Themen 6
J Dateien lesen und schreiben Java Basics - Anfänger-Themen 5
F MS365 Kalender lesen Java Basics - Anfänger-Themen 5
Robin Gentele XML von Webserver lesen und ausgeben Java Basics - Anfänger-Themen 5
H Scripte oder Programmcode aus Datei lesen? Java Basics - Anfänger-Themen 5
S Zufällige ungerade Zeile aus Text-Datei lesen Java Basics - Anfänger-Themen 5
C Fehlermeldungen lesen Java Basics - Anfänger-Themen 2
S Allgemeine Java Codes lesen und verstehen Java Basics - Anfänger-Themen 7
NeoLexx Datenströme Lesen und Schreiben einer Textdatei Java Basics - Anfänger-Themen 2
rafi072001 Lesen aus einem Excel File Java Basics - Anfänger-Themen 10
T Klassen Den Wert aus Array lesen lassen Java Basics - Anfänger-Themen 12
J Lesen und schreiben in eine Datei(Anfänger- Dateizugriffe) Java Basics - Anfänger-Themen 3
S JSON Datei schreiben und lesen Java Basics - Anfänger-Themen 3
S Java Array Länge aus anderer Klasse lesen Java Basics - Anfänger-Themen 1
G Excle datei aus resources folder finden und lesen Java Basics - Anfänger-Themen 5
J Datei aus Projektfolder lesen Java Basics - Anfänger-Themen 12
H Vererbung Static Scanner Objekt verwenden - von StdIn in einer importierten Klasse lesen Java Basics - Anfänger-Themen 10
K Probleme beim Programm schreiben - Lesen von Dateiinhalten -zaehlen von Wörtern/ Buchstaben Java Basics - Anfänger-Themen 4
S Tastatur input lesen Java Basics - Anfänger-Themen 7
S Mit FileReader lesen, in ArrayList speichern Java Basics - Anfänger-Themen 4
B Aus Datei lesen Java Basics - Anfänger-Themen 23
B Aus Datei lesen Java Basics - Anfänger-Themen 0
deatzi Wert aus anderer Klasse lesen Java Basics - Anfänger-Themen 7
W Wie lasse ich meine Ausgabe nach dem Lesen verschwinden ? Java Basics - Anfänger-Themen 1
A JSON Lesen und Schreiben. Java Basics - Anfänger-Themen 3
S Daten lesen und speichern Java Basics - Anfänger-Themen 26
C Input/Output Datei aus Startverzeichnis lesen Java Basics - Anfänger-Themen 6
amazinglife77 Input/Output Lesen/Schreiben Properties: in eclipse geht, als JAR nicht Java Basics - Anfänger-Themen 4
G Input/Output Aus txt-Datei lesen, aus Ordner Java Basics - Anfänger-Themen 1
S BufferedReader nächste Zeile lesen Java Basics - Anfänger-Themen 4
sourcecorn Werte aus einem File lesen Java Basics - Anfänger-Themen 6
G Jar-Archiv zum Lesen einer Konfigurationsdatei Java Basics - Anfänger-Themen 9
MaxG. Input/Output Datei lesen Java Basics - Anfänger-Themen 3
Hacer Quellcode lesen Java Basics - Anfänger-Themen 13
H Aus wav-datei lesen und in neue wav-datei speichern Java Basics - Anfänger-Themen 10
N Lesen eines files mit FILES.lines Java Basics - Anfänger-Themen 11
A Private Attribut aus fremder Klasse lesen ? Java Basics - Anfänger-Themen 19
R Ab einer bestimmten Zeile lesen Java Basics - Anfänger-Themen 3
P vokale konsonanten ziffern satzzeichen aus string lesen. hab kiene ahnung Java Basics - Anfänger-Themen 10
A textfeldwerte aus array lesen Java Basics - Anfänger-Themen 27
K Classpath Lesen von Property-File Java Basics - Anfänger-Themen 1
D Methoden Array aus Datei lesen und weitergeben? Java Basics - Anfänger-Themen 7
T 'Nix' aus Textdokument lesen Java Basics - Anfänger-Themen 11
G tga Datei lesen und in eine matrix umwandeln Java Basics - Anfänger-Themen 1
F Input/Output Dateien lesen/schreiben Java Basics - Anfänger-Themen 1
E lesen csv file column by column Java Basics - Anfänger-Themen 10
G Bis zu einem bestimmten Punkt aus Datei lesen Java Basics - Anfänger-Themen 2
K Mit Scanner aus einer txt Datei lesen und jede Person mit name, vorname, geburtsdatum speichern Java Basics - Anfänger-Themen 5
K Dateien lesen | IndexOutOfBoundsException Java Basics - Anfänger-Themen 2
E Input/Output Property-Datei aus einer Zip lesen in in einer anderen Zip-Datei ist Java Basics - Anfänger-Themen 3
B Input/Output Scanner-Probleme bei String-Lesen Java Basics - Anfänger-Themen 3
I Properties oder Umgebungsvariablen mit ${irgendwas} lesen? Java Basics - Anfänger-Themen 2
D Lesen aus Datei (java.util.NoSuchElementException) Java Basics - Anfänger-Themen 22
D Problem beim Lesen einer txt-Datei Java Basics - Anfänger-Themen 8
G Zeile charweise lesen Java Basics - Anfänger-Themen 3
J Aus Datei lesen und ausgeben Java Basics - Anfänger-Themen 4
N Bestimmte Inhalte aus Datei lesen Java Basics - Anfänger-Themen 11
G Datei zeilenweise lesen Java Basics - Anfänger-Themen 19
M Wie sämtliche Schlüssel und Attibutwerte aus einer Propertie Datei lesen? Java Basics - Anfänger-Themen 3
S Compiler-Fehler jOpenDocument Kompelierfehler - ODS Datei lesen Java Basics - Anfänger-Themen 2
C Aus einer Textdatei Zahlen lesen mit Leerzeichen Java Basics - Anfänger-Themen 11
T BufferReader soll datei mehrmals lesen Java Basics - Anfänger-Themen 13
G Leere Zeile lesen Java Basics - Anfänger-Themen 12
F Effizientes Lesen von 65 Datein mit Boolean Werten Java Basics - Anfänger-Themen 6
S Datei aus JAR lesen. Java Basics - Anfänger-Themen 9
G Zeilenweise lesen Java Basics - Anfänger-Themen 17
C Mehrere Tasten beim KeyListener gleichzeitig lesen Java Basics - Anfänger-Themen 2
B Erst lesen: Automatisch Texteingabe bestätigen Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben