In Remote -Aufrufen müssen Parameter und Rückgabewerte über das Netzwerk übertragen werden. Diese Verwendung erfordert eine Serialisierung, um das Objekt in einen Byte -Stream umzuwandeln und es dann von einem Ende zum anderen in ein Objekt zu verwirklichen.
Da es einen früheren Artikel gibt, in dem Hessian erwähnt wird, werden wir hier kurz über den Unterschied zwischen Java -Serialisierung und hessischer Serialisierung sprechen.
Erstens ist die hessische Serialisierung viel effizienter als die Java -Serialisierung, und der erzeugte Bytestrom ist viel kürzer. Relativ gesehen ist die Java -Serialisierung jedoch nicht zuverlässig und ist nicht so umfassend wie die Unterstützung der Java -Serialisierung. Der Grund für einen solchen Unterschied besteht darin, ihre Umsetzung zu betrachten.
Sprechen wir zuerst über Java -Serialisierung. Ich werde nicht über das spezifische Arbeitsprinzip sprechen. Die Java -Serialisierung wird die Metadaten und Geschäftsdaten der Objektklasse serialisieren, die aus dem Bytestrom serialisiert werden, und alle Dinge in der gesamten Erbbeziehung serialisieren. Der serialisierende Byte -Stream ist eine vollständige Beschreibung der Objektstruktur zum Inhalt, das alle Informationen enthält, sodass er weniger effizient und der Byte -Stream relativ groß ist. Aber da tatsächlich alles serialisiert ist, kann gesagt werden, dass alles übertragen werden kann, sodass es auch nutzbarer und zuverlässiger ist.
In Bezug auf die hessische Serialisierung besteht der Implementierungsmechanismus darin, sich auf Daten zu konzentrieren und einfache Typinformationen zu begleiten. Genau wie Ganzzahl a = 1 wird Hessian in einen Stream wie ich serialisieren. Ich repräsentiere int oder Ganzzahl, und 1 ist der Dateninhalt. Für komplexe Objekte serialisiert Hessian durch den Java -Reflexionsmechanismus alle Eigenschaften des Objekts als Karte und erzeugt einen Stream wie M className PropertyName1 i 1 PropertyName s StringValue (wahrscheinlich genau vergessen), der den grundlegenden Typ Beschreibung und Dateninhalt enthält. Während des Serialisierungsprozesses fügt Hessian einen Block wie den R -Index direkt ein, um eine Referenzposition darzustellen, wodurch die Zeit der Serialisierung und Deserialisierung erneut beseitigt wird. Der Preis dafür ist, dass Hessian unterschiedliche Typen unterschiedlich behandeln muss (also ist Hessian faul und unterstützt nicht kurz) und er muss auch spezielle Vorgänge erledigen, wenn er auf bestimmte spezielle Objekte (z. B. StacktraceElement) begegnet. Gleichzeitig, da es nicht tief in die Implementierung eingeht, um eine Serialisierung durchzuführen, wird es in einigen Gelegenheiten bestimmte Inkonsistenzen geben, wie z.
Die Serialisierung bezieht sich auf die Serialisierung eines Objekts in einen Byte -Stream für eine einfache Speicherung oder Netzwerkübertragung. Während die Deserialisierung genau das Gegenteil ist, wandelt sich der Byte -Stream in ein Objekt zurück. Was wir normalerweise verwenden, ist die hessische Serialisierungsmethode und die Java -Serialisierungsmethode. Die Effizienz- und Serialisierungsgröße der beiden Serialisierungsmethoden ist unterschiedlich. Nach den Testergebnissen zu urteilen, ist Hessian besser. Hier ist ein hessisches Serialisierungsbeispiel (keine Datei -IO und Netzwerk -IO, reine Serialisierung und Deserialisierung):
/** * reine hessische Serialisierung * @param -Objekt * @return * @throws Exception */public static byte [] serialize (Object Object) löst Ausnahme aus {if (Object == null) {neue nullpointerexception ();} bytearrayoutputStream os = new bytearrayoutstream (); Hesserializeroutput (os); Nullpointerexception ();} bytearrayinputStream ist = new bytearrayinputstream (bytes);Eine weitere gemeinsame Methode ist die Java -Serialisierung:
/** * Java Serialisierung * @param obj * @return * @throws Exception */public static byte [] serialize (Object obj) löst Ausnahme aus {if (obj == null). ObjectOutputStream (os); out.writeObject (obj); return os.tobytearray ();}/** * Java Deserialization * @param durch * @return * @throws Ausnahme */public statisches Objekt Deserialize (Byte [] durch) Auslässt Ausnahme {if (by == null) throws townway = newnull) NEW NEW NULLPOINTER (). BytearrayInputStream (by); ObjectInputStream in = new ObjectInputStream (IS); return in.readObject ();}Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.