2013-03-05 10 views
7

Ich arbeite an einem Lego Mindstorm NXT Roboter, der Java Reflektion nicht unterstützt.Wie funktioniert die Java-Serialisierung ohne Reflection?

Aus irgendeinem Grund (die parallele Erstellung eines Simulators und eines tatsächlichen Mindstorm) wollen wir Serialisierung verwenden, um Java-Objekte auszutauschen.

Das Problem ist, dass Serialisierung Reflexion verwendet, die die JVM auf dem Mindstorm nicht unterstützt.

Irgendwelche Ideen?

Ich habe this page on Zwong.de gefunden, aber der Quellcode wurde entfernt.

+1

Dem twitter Name Typ auf aufgeführt wird diese Seite (@corneliushald) - könnte es wert sein, ihn zu pingen und zu fragen. Meist fehlen diese Dinge mehr zufällig als Design. – berry120

Antwort

1

Ich glaube, Kryo unterstützt die reflektionslose Instanziierung von serialisierbaren Objekten. Ein kurzer Blick auf ihre Homepage scheint es zu bestätigen:

Wenn ReflectASM oder Reflection nicht verwendet werden kann, kann Kryo so konfiguriert werden, dass eine InstantiatorStrategy verwendet wird, um Instanzen einer Klasse zu erstellen. Ob- genesis stellt StdInstantiatorStrategy zur Verfügung, die JVM-spezifische APIs verwendet, um eine Instanz einer Klasse zu erstellen, ohne einen Konstruktor aufzurufen. Dies funktioniert auf vielen JVMs.

Aus das klingt wie Sie Ihre eigenen InstantiatorStrategy erstellen müssen werde, da ich die Standard eine Unterstützung nicht sicher bin, haben für die NXT JVM - obwohl ein Versuch wert! Ich habe das selbst nicht versucht, aber es klingt, als wäre es theoretisch möglich.

0

Ich habe zwei mögliche Hinweise gefunden. Hoffentlich helfen dir diese etwas.

1) Doing Java serialization without reflection

2) xml serialization generator for java without using reflection

+1

Der Quellcode deiner ersten Antwort ist offline, ich habe es bereits in meiner Frage erwähnt. –

+0

Ich habe es geschafft, dass die zwischengespeicherte Version von Google geladen wurde, was ich verlinkt habe. Es sieht jedoch zweifelhaft aus, dass Sie den Quellcode gleich herunterladen können. Vielleicht wird der Server in Kürze wieder verfügbar sein. –

+2

Bitte schauen Sie auf [antworten] und die [faq]. Ihre Antwort muss in sich abgeschlossen sein. Bitte verbessern Sie Ihre Antwort, um diese Art des Denkens zu reflektieren. –

0

Serialisierung und Deserialisierung ist einfach eine Art und Weise des Schreibens und Lesen eines Objekts. Sie können immer Ihre eigenen Methoden schreiben, die alle Objektdaten zu/von einer Zeichenkette/Datei/Stream schreiben und lesen.

Darüber hinaus sind benutzerdefinierte Serialisierungsmethoden, insbesondere diese mit binären Daten, oft weniger Zeit, Speicher und Rechenleistung als diese von z. B. Serialisierbaren zur Verfügung gestellt.

1

Machen Sie Ihre Klassen Externalizable implementieren, dann ObjectOuputStream.writeObject()/readObject-() werden writeExternal (ObjectOutput out)/readExternal (ObjectInput) auf Objekte directy aufrufe, ohne Reflexion mit

+0

Wir wussten nicht über die Existenz der Externalizable-Schnittstelle, aber es klingt vielversprechend. Problem ist, dass die leJOS Java Mindstorm API keine ObjectOutputStream oder ObjectInputStream Klasse zur Verfügung stellt. Wie können wir Externalizable ohne diese Objekte verwenden? Oder sollten wir unsere eigenen Klassen ohne Reflexion implementieren? –