Scala-Serialisierung/ - Deserialisierung des singleton-Objekt

Ich bin ganz neu in der scala-Programmiersprache, und ich Zeit brauchen, das folgende zu tun. Ich habe eine signleton Objekt wie folgt:

object MyObject extends Serializable {
    val map: HashMap[String, Int] = null
    val x: int = -1;
    val foo: String = ""
}

Nun möchte ich vermeiden, zu serialisieren jedes Feld von diesem Objekt getrennt, so war es mir schwebte das ganze Objekt in eine Datei, und klicken Sie dann in der nächsten Ausführung des Programms, Lesen Sie die Datei und initialisieren Sie die singleton-Objekt aus. Gibt es eine Möglichkeit, dies zu tun?

Im Grunde, was ich will, ist, wenn die Serialisierung, die Datei nicht vorhanden ist, werden diese Variablen initialisiert werden, um neue Strukturen, während, wenn es vorhanden ist, werden die Felder initialisiert werden, von denen, die auf die Datei. Aber ich möchte vermeiden, dass serialisieren/Deserialisieren jedes Feld manuell...

UPDATE:

Hatte ich die Verwendung einer benutzerdefinierten deserializer, wie hier vorgestellt: https://issues.scala-lang.org/browse/SI-2403, da hatte ich Probleme mit einer benutzerdefinierten Klasse, die ich in der HashMap, die als Werte.

UPDATE2:

Hier ist der code, ich benutze zum serialisieren:

val store = new ObjectOutputStream(new FileOutputStream(new File("foo"))) 
store.writeObject(MyData) 
store.close

Und den code zum Deserialisieren (in einer anderen Datei):

@transient private lazy val loadedData: MyTrait = {
    if(new File("foo").exists()) {
        val in = new ObjectInputStream(new FileInputStream("foo")) {
            override def resolveClass(desc: java.io.ObjectStreamClass): Class[_] = {
                try { Class.forName(desc.getName, false, getClass.getClassLoader) }
                catch { case ex: ClassNotFoundException => super.resolveClass(desc) }
            }
        }
        val obj = in.readObject().asInstanceOf[MyTrait] 
        in.close
        obj
    }
    else null
}

Dank,

Wir würden gerne sehen, dass die Frage 🙂
Hier ist es 🙂 aus irgendeinem Grund wurde es gepostet, bevor ich fertig schreiben...
Aus Neugier, was ist das? Reading config-Dateien vielleicht?
Im Grunde genommen habe ich ein system entwickelt habe, und ich will seine wichtigsten Daten-Struktur in eine Datei geschrieben, die für die Persistenz Gründen. Die Datenstruktur wird (irgendwann :)) sehr groß werden, und das ist der Grund, warum ich wollen, um zu vermeiden, dass die Serialisierung jedes Feld separat.
Anmerkung: Vermeiden Sie die Verwendung von null im Scala. Es ist wirklich nur vorhanden ist, um die Interoperabilität mit Java. Verwenden Option statt, wenn sich etwas "leer".

InformationsquelleAutor Y.K. | 2012-12-05

Schreibe einen Kommentar