Interessanter Artikel (Danke, Arndt!) zum Kopieren von Dateien mit Java. Läuft im wesentlichen darauf hinaus, dass das offensichtliche (im Artikel “Native Stream” genannte) Vorgehen
1 2 3 4 |
int c; while ((c = fin.read()) != -1) { fout.write(c);} } |
ziemlich langsam ist. Das an sich verwundert jetzt noch nicht (auch wenn ich das nicht wusste). Was zumindest mich aber sehr wohl verwundert hat: Wie einfach und wie viel performanter die Alternative (genannt “Custom Buffer Stream”) aussieht:
1 2 3 4 5 |
byte[] buf = new byte[8192]; int i; while ((i = fis.read(buf)) != -1) { fos.write(buf, 0, i); } |
Kann man sich mal merken, und kann man bei Gelegenheit auch mal in anderen Sprachen ausprobieren.
Yeah, der Grund ist vermutlich, daß ohne Buffer für jedes einzelne Byte eine Anfrage beim OS getätigt wird. Und die zweite Variante fragt gleich in Schüben an, was wesentlich weniger I/O-Overhead produziert.
Das liegt zumindest nahe, ja 🙂