C
canndy
Gast
Hallo,
ich habe eine ziemlich große Datei (1 GB Flat File), die ich sequentiell analysieren möchte.
Nun habe ich durch Tests festgestellt, dass BufferedInputStream (aus io) und MappedByteBuffer (aus nio) so ungefähr die schnellsten Lösungen sind -- abgesehen von Direct Buffering. Beide Möglichkeiten sind für das sequentielle Lesen ungefähr gleich schnell:
Variante IO:
Variante NIO:
Was mich aber verwundert ist das Speicherverhalten dieser beiden Varianten. Im Windows Task-Manager benötigt Variante NIO teilweise 500 MB Speicher, während Variante IO mit 8 MB klarkommt.
Warum ist das so? Sollte man für sequentielles Lesen immer IO statt NIO verwenden?
canndy
ich habe eine ziemlich große Datei (1 GB Flat File), die ich sequentiell analysieren möchte.
Nun habe ich durch Tests festgestellt, dass BufferedInputStream (aus io) und MappedByteBuffer (aus nio) so ungefähr die schnellsten Lösungen sind -- abgesehen von Direct Buffering. Beide Möglichkeiten sind für das sequentielle Lesen ungefähr gleich schnell:
Variante IO:
Code:
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("TEST.CSV"));
while (bis.read() >= 0);
Variante NIO:
Code:
RandomAccessFile raf = new RandomAccessFile("TEST.CSV","r");
MappedByteBuffer mbb = raf.getChannel().map(FileChannel.MapMode.READ_ONLY, 0, raf.length());
while (mbb.hasRemaining()) mbb.get();
Was mich aber verwundert ist das Speicherverhalten dieser beiden Varianten. Im Windows Task-Manager benötigt Variante NIO teilweise 500 MB Speicher, während Variante IO mit 8 MB klarkommt.
Warum ist das so? Sollte man für sequentielles Lesen immer IO statt NIO verwenden?
canndy