import java.io.{BufferedInputStream, BufferedOutputStream, FileInputStream, FileOutputStream} import java.nio.file.{Files, Paths} if (args.length < 1) { println("Provide filename") System.exit(-1) } val k = 256 val numOfNums = k * 1024 * 1024 val fileName = args(0) val reps = 6 def writeUsingFile(): Unit = { val writer = new BufferedOutputStream(new FileOutputStream(fileName)) try { 1 to numOfNums foreach { x => writer.write(x & 0xff) } } finally writer.close } def readUsingFile(): Unit = { var t = 0 val reader = new BufferedInputStream(new FileInputStream(fileName)) try { 1 to numOfNums foreach { _ => reader.read ; t += 1 } } finally reader.close assert(t >= numOfNums) Files.delete(Paths.get(fileName)) } Files.deleteIfExists(Paths.get(fileName)) val (read, write) = 1 to reps map { _ => val time1 = System.nanoTime() writeUsingFile() val time2 = System.nanoTime() readUsingFile() val time3 = System.nanoTime() val tmp1 = numOfNums / 1024 / 1024 * 1e9 val readTime = tmp1 / (time3 - time2) val writeTime = tmp1 / (time2 - time1) println(s"$readTime $writeTime") (readTime, writeTime) } drop 1 reduce { (x, y) => ((x._1 + y._1), (x._2 + y._2)) } val tmp1 = reps -1 println(s"Bytes: ${numOfNums / 1024 / 1024} MB, ReadRate: ${read / tmp1} MB/s, WriteRate: ${write / tmp1} MB/s")