web-dev-qa-db-fra.com

Convertit n'importe quel type de scala en Array [Byte] et retour

J'ai la question suivante:

J'ai une valeur de variable dans mon programme qui est déclarée comme n'importe quelle valeur. 

Je veux convertir cette valeur en Byte Array ..

Comment puis-je sérialiser d'octet Array et vice-versa? J'ai trouvé des exemples liés à d'autres types tels que Double ou Int, mais pas comme Any.

13
Ectoras

Cela devrait faire ce dont vous avez besoin. C'est assez similaire à la façon de le faire en Java.

import Java.io.{ByteArrayInputStream, ByteArrayOutputStream, ObjectInputStream, ObjectOutputStream}

object Serialization extends App {

  def serialise(value: Any): Array[Byte] = {
    val stream: ByteArrayOutputStream = new ByteArrayOutputStream()
    val oos = new ObjectOutputStream(stream)
    oos.writeObject(value)
    oos.close()
    stream.toByteArray
  }

  def deserialise(bytes: Array[Byte]): Any = {
    val ois = new ObjectInputStream(new ByteArrayInputStream(bytes))
    val value = ois.readObject
    ois.close()
    value
  }

  println(deserialise(serialise("My Test")))
  println(deserialise(serialise(List(1))))
  println(deserialise(serialise(Map(1 -> 2))))
  println(deserialise(serialise(1)))
}
18
Bruce Lowe
def anyTypeToByteArray(value: Any): Array[Byte] = {
    val valueConverted :Array[Byte] = SerializationUtils.serialize(value.isInstanceOf[Serializable])
    valueConverted
  }

  def ByteArrayToAny(value: Array[Byte]): Any = {
    val valueConverted: Any = SerializationUtils.deserialize(value)
    valueConverted
  }
0
Ectoras