Fork me on GitHub
#clojure-italy
<
2020-02-04
>
alan09:02:44

Ma se ho uno stream bello "grosso" (tipo 1 GB) e faccio una roba tipo:

(with-open [w (io/output-stream "file")]
  (io/copy
    (io/input-stream (:body @request))))
Lo stream viene copiato su disco blocco per blocco o prima lo tiene tutto in memoria e poi lo scrive?

reborg11:02:56

Buona domanda. E’ basato su Java NIO transferChannel https://docs.oracle.com/javase/7/docs/api/java/nio/channels/FileChannel.html#transferTo(long,%20long,%20java.nio.channels.WritableByteChannel) e la risposta e’ che in generale, un sistema operativo moderno non trasferisce nemmeno un buffer dei bytes in memoria

alan11:02:04

E quindi ora mi spiego pure la differenza nei tempi passando da Linux a Winzozz. Grazie mille @reborg

reborg11:02:08

np, buono a sapersi

andrea.crotti12:02:58

ancora un po' alpha diciamo ma fantastico, ho gia' cancellato un migliaio di righe in vari progetti