All Downloads are FREE. Search and download functionalities are using the official Maven repository.

jvmAndroidCommon.com.harmony.kotlin.data.mapper.ByteArrayMapper.kt Maven / Gradle / Ivy

package com.harmony.kotlin.data.mapper

import com.harmony.kotlin.error.DataSerializationException
import java.io.ByteArrayInputStream
import java.io.ByteArrayOutputStream
import java.io.ObjectInputStream
import java.io.ObjectOutputStream
import java.io.Serializable

/**
 * Map a byte array to a class object
 */
class ByteArrayToModelMapper : Mapper {
  override fun map(from: ByteArray): T = try {
    from.toObject()
  } catch (e: Exception) {
    throw DataSerializationException(cause = e)
  }
}

/**
 * Map a class object to a byte array
 */
class ModelToByteArrayMapper : Mapper {
  override fun map(from: T): ByteArray = try {
    from.toByteArray()
  } catch (e: Exception) {
    throw DataSerializationException(cause = e)
  }
}

/**
 * Map a byte array to a list class object
 */
class ByteArrayToListModelMapper : Mapper> {
  override fun map(from: ByteArray): List = try {
    from.toObject()
  } catch (e: Exception) {
    throw DataSerializationException(cause = e)
  }
}

/**
 * Map a list class object to a byte array
 */
class ListModelToByteArrayMapper : Mapper, ByteArray> {
  override fun map(from: List): ByteArray = try {
    from.toByteArray()
  } catch (e: Exception) {
    throw DataSerializationException(cause = e)
  }
}

private fun Collection.toByteArray(): ByteArray {
  val bos = ByteArrayOutputStream()
  return ObjectOutputStream(bos).use { oos ->
    oos.writeObject(this)
    oos.flush()
    bos.toByteArray()
  }
}

private fun Serializable.toByteArray(): ByteArray {
  val bos = ByteArrayOutputStream()
  return ObjectOutputStream(bos).use { oos ->
    oos.writeObject(this)
    oos.flush()
    bos.toByteArray()
  }
}

private fun  ByteArray.toObject(): T {
  return ObjectInputStream(ByteArrayInputStream(this)).use { ois ->
    ois.readObject() as T
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy