2013-09-03 14 views
5

Stavo cercando di entrare nella nuova libreria Scala Mezzi di conservazione che è stato presentato ai ScalaDays 2013: Scala PicklingScala decapaggio utilizzo MyObject -> Array [Byte] -> MyObject

Quello che sto veramente mancanti sono alcuni semplici esempi su come la biblioteca è usata.

ho capito che posso PIckle qualche oggetto nuovo un deserializzare esso così:

import scala.pickling._ 

val pckl = List(1, 2, 3, 4).pickle 
val lst = pckl.unpickle[List[Int]] 

In questo esempio, pckl è di tipo Pickle. Che cosa è esattamente l'uso di questo tipo e come posso ottenere ad esempio ottenere una matrice [Byte] di esso?

risposta

6

se si vuole voleva salamoia in byte, quindi il codice sarà simile a questa:

import scala.pickling._ 
import binary._   
val pckl = List(1, 2, 3, 4).pickle 
val bytes = pckl.value 

Se si voleva JSON, il codice sarà quasi la stessa con una piccola modifica delle importazioni:

import scala.pickling._ 
import json._   
val pckl = List(1, 2, 3, 4).pickle 
val json = pckl.value 

Come l'oggetto viene serializzato dipende dal tipo di importazione che si è scelto in scala.pickling (essendo sia binary o json). Importa binary e la proprietà value è un Array[Byte]. Importa json ed è un codice penale String.

+2

Sì, il cmbaxter ha perfettamente ragione. Il tipo della rappresentazione decapata è un sottotipo di 'Pickle'. Selezionando il 'valore' dalla rappresentazione decapata si ottiene il tipo che ci si aspetterebbe, 'Array [Byte]' per binario, 'String' per JSON, ecc. –

+0

Grazie per le risposte. A volte mi confondo quando Scala fa qualcosa implicitamente. Sono ancora abituato alla sintassi più esplicita come Java ma ci sto lavorando. ;) –

+1

Potrebbe essere che IntelliJ non capisce, quale tipo usare? Ho importato scala.pickling._ e binary._ e quando chiamo .pickle su un oggetto, IntelliJ mi dice che è del tipo Pickle, non BinaryPickle. Pertanto mi dice che .value è del tipo Pickle.this.type # ValueType. Il compilatore non si lamenta, perché il tipo di risultato è BinaryPickle. La mia soluzione: chiamare per ora .pickle.asInstanceOf [BinaryPickle] in modo che non visualizzi un errore nell'IDE. –

Problemi correlati