2016-09-07 3 views
6

Ich habe folgende Frage:Jede Art in scala zu Array konvertieren [Byte] und zurück

Ich habe einen Variablenwert in meinem Programm, das als ein beliebiger Wert deklariert wird.

ich diesen Wert auf Byte-Array konvertieren möchten ..

Wie kann ich auf Byte-Array serialisiert und zurück? Ich habe Beispiele gefunden, die sich auf andere Typen wie Double oder Int beziehen, aber nicht auf Any.

+0

Wie kann man etwas serialisiert werden, wenn Sie nicht wissen, was es ist? –

+0

Ich habe die gleiche Frage .. Es ist eine Eingabe von einem Benutzer, kann Bild sein, Nummer, Zeichenfolge .. und dann muss ich es in Array [Byte] konvertieren, damit ich es in DB speichern kann – Ectoras

+0

Wenn es ein ist Eingabe vom Benutzer, dann ist es schon ein 'String', oder? Also warum nicht einfach die 'String' speichern? –

Antwort

8

Dies sollte tun, was Sie brauchen. Es ist ziemlich ähnlich wie man es in Java machen würde.

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))) 
} 
+0

Vielen Dank, das funktioniert. Ich habe auch folgendes gefunden: Was ist der Unterschied zu Ihrer Lösung? – Ectoras

-2
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

Ihr verwendet eine Drittanbieter-Bibliothek. –

+0

Wie JasperM erwähnt, verwendet dies Apache Commons. Auch eine praktikable Lösung, wenn Sie bereit sind, es zu bringen. –

+0

danke GUS für Ihre Hilfe! – Ectoras

Verwandte Themen