1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
|
import scala.pickling._
import scala.pickling.Defaults._
import scala.pickling.binary._
import java.io._
import scala.util.Random
// taken from geotrellis:
trait MutableRasterData
trait IntBasedArray
final case class IntArrayRasterData(array: Array[Int], cols: Int, rows: Int)
extends MutableRasterData with IntBasedArray
trait GeoTrellisBenchmark extends scala.pickling.testing.PicklingBenchmark {
// println("alloc new arr of size " + size)
val coll = (1 to size).toArray.map(_ + (16 * 1048576))
val data = IntArrayRasterData(coll, 64, 64)
}
object GeoTrellisPicklingBench extends GeoTrellisBenchmark {
override def run() {
val pickle = data.pickle
val res = pickle.unpickle[IntArrayRasterData]
}
}
object GeoTrellisJavaBench extends GeoTrellisBenchmark {
override def run(): Unit = {
val bos = new ByteArrayOutputStream()
val out = new ObjectOutputStream(bos)
out.writeObject(data)
val ba = bos.toByteArray()
val bis = new ByteArrayInputStream(ba)
val in = new ObjectInputStream(bis)
val res = in.readObject.asInstanceOf[IntArrayRasterData]
}
}
object GeoTrellisKryoBench extends GeoTrellisBenchmark {
var ser: KryoSerializer = _
override def tearDown() {
ser = null
}
override def run() {
val rnd: Int = Random.nextInt(10)
//val arr = Array.ofDim[Byte](32 * 2048 * 2048 + rnd)
val arr = Array.ofDim[Byte](32 * 2048 + rnd)
ser = new KryoSerializer
ser.kryo.register(data.getClass)
val pickled = ser.toBytes(data, arr)
// println("Size: " + pickled.length)
val res = ser.fromBytes[IntArrayRasterData](pickled)
}
}
|