Serialisierung

Im Computer, Serialisierung (US und Oxford Rechtschreibung) oder Serialisierung (Rechtsschreibung in Großbritannien) ist der Prozess der Übersetzung a Datenstruktur oder Objekt in ein Format geben, das gespeichert werden kann (z. B. in a Datei oder Speicher Datenpuffer) oder übertragen (zum Beispiel über a Computernetzwerk) und später rekonstruiert (möglicherweise in einer anderen Computerumgebung).[1] Wenn die resultierende Reihe von Bits gemäß dem Serialisierungsformat erneut gelesen wird, kann sie verwendet werden, um einen semantisch identischen Klon des ursprünglichen Objekts zu erstellen. Für viele komplexe Objekte, wie z. B. solche, die ausgiebig nutzen VerweiseDieser Prozess ist nicht einfach. Serialisierung von objektorientiertem Objekte schließt keine ihrer damit verbundenen verbunden Methoden mit denen sie zuvor verknüpft waren.

Dieser Prozess der Serialisierung eines Objekts wird ebenfalls genannt Marshalle ein Objekt in einigen Situationen.[2][3][4] Der entgegengesetzte Betrieb, der eine Datenstruktur aus einer Reihe von Bytes extrahiert, ist Deserialisierung, (auch genannt Weiterentwicklung oder Unmarshalling).

Verwendet

Methoden von:

Damit einige dieser Funktionen nützlich sind, muss die Unabhängigkeit der Architektur beibehalten werden. Zum Beispiel sollte ein Computer, der auf einer anderen Hardwarearchitektur ausgeführt wird Endiangess. Dies bedeutet, dass der einfachere und schnellere Verfahren des direkten Kopierens des Speicherlayouts der Datenstruktur für alle Architekturen nicht zuverlässig funktionieren kann. Serialisierung der Datenstruktur in einem architekturunabhängigen Format bedeutet, die Probleme von zu verhindern Bytebestellung, Speicherlayout oder einfach unterschiedliche Möglichkeiten zur Darstellung von Datenstrukturen in verschiedenen Programmiersprachen.

Einer Serialisierungsschema inhärent ist, dass die Codierung der Daten per Definition seriell ist, wenn ein Teil der serialisierten Datenstruktur extrahiert wird, erfordert, dass das gesamte Objekt von Anfang bis Ende gelesen und rekonstruiert wird. In vielen Anwendungen ist diese Linearität ein Kapital, da einfache, allgemeine E/A -Schnittstellen verwendet werden können, um den Zustand eines Objekts zu halten und weiterzugeben. In Anwendungen, bei denen eine höhere Leistung ein Problem darstellt, kann es sinnvoll sein, mehr Anstrengungen für eine komplexere, nichtlineare Speicherorganisation zu unternehmen.

Sogar auf einer einzigen Maschine primitiv Zeiger Objekte sind zu zerbrechlich, um zu speichern, da die Objekte, auf die sie zeigen, an einen anderen Speicherort im Speicher neu geladen werden können. Um damit umzugehen, enthält der Serialisierungsprozess einen Schritt mit dem Namen ungehörig oder Zeiger ungebunden, wobei direkte Zeigerreferenzen in Referenzen basierend auf Namen oder Position konvertiert werden. Der Deserialisierungsprozess enthält einen umgekehrten Schritt namens Zeiger wölzt.

Da sowohl Serialisierung als auch Deserialisierung aus dem gemeinsamen Code getrieben werden können (zum Beispiel die, die Serialisieren Funktion in Microsoft Foundation -Kurse) Es ist möglich, dass der gemeinsame Code gleichzeitig sowohl ausreicht als auch 1) Unterschiede zwischen den serialisierten Objekten und ihren vorherigen Kopien erkennen und 2) die Eingabe für die nächste solche Erkennung liefern. Es ist nicht erforderlich, die vorherige Kopie tatsächlich zu erstellen, da Unterschiede im laufenden Fliegen erkannt werden können, eine Technik, die als Differenzausführung bezeichnet wird. Dies ist nützlich bei der Programmierung von Benutzeroberflächen, deren Inhalt zeitvariant ist-grafische Objekte können erstellt, entfernt, geändert oder zur Behandlung von Eingabeereignissen erstellt werden, ohne unbedingt separate Code schreiben zu müssen, um diese Dinge zu tun.

Nachteile

Serialisierung bricht die Deckkraft eines Zusammenfassung Datentyp durch potenziell private Implementierungsdetails. Triviale Implementierungen, die alle Datenmitglieder serialisieren können Verkapselung.[5]

Wettbewerber davon abzuhalten, kompatible Produkte herzustellen, Verleger von proprietäre Software Halten Sie oft die Details der Serialisierungsformate ihrer Programme a Geschäftsgeheimnis. Einige absichtlich verschleiern oder auch Verschlüsseln Die serialisierten Daten. Interoperabilität erfordert jedoch, dass Anwendungen die Serialisierungsformate des anderen verstehen können. Deswegen, Remote -Methodenaufruf Architekturen wie Corba Definieren Sie ihre Serialisierungsformate im Detail.

Viele Institutionen wie Archive und Bibliotheken versuchen es zukunftssicher ihr Backup Archive - insbesondere, Datenbank -Dumps- Durch die Aufbewahrung von einigen relativ für Menschen lesbar Serialisiertes Format.

Serialisierungsformate

Das Xerox -Netzwerksysteme Die Kuriertechnologie in den frühen 1980er Jahren beeinflusste den ersten weit verbreiteten Standard. Sun Microsystems veröffentlichte die Externe Datenrepräsentation (Xdr) 1987.[6] Xdr ist ein offenes Format, und standardisiert als STD 67 (RFC 4506).

In den späten neunziger Jahren begann ein Vorstoß zur Bereitstellung einer Alternative zu den Standard -Serialisierungsprotokollen: Xml, ein SGML Untergruppe wurde verwendet, um ein menschliches Lesen zu produzieren Textbasierte Codierung. Eine solche Codierung kann für anhaltende Objekte nützlich sein, die von Menschen gelesen und verstanden werden können oder anderen Systemen unabhängig von der Programmiersprache mitgeteilt werden. Es hat den Nachteil, die kompakteren, byte-streambasierten Codierung zu verlieren, aber an diesem Punkt wurden jedoch größere Speicher- und Übertragungskapazitäten die Dateigröße weniger besorgniserregend als in den frühen Berechnungstagen. In den 2000er Jahren wurde XML häufig zur asynchronen Übertragung strukturierter Daten zwischen Client und Server in verwendet Ajax Web Applikationen. XML ist ein offenes Format und standardisiert als a W3C -Empfehlung.

JSON, ist eine leichtere Schalttaste-Text-Alternative zu XML, die auch häufig für die Kunden-Server-Kommunikation in Webanwendungen verwendet wird. JSON basiert auf JavaScript -Syntax, ist aber unabhängig von JavaScript und unterstützt auch in anderen Programmiersprachen. JSON ist ein offenes Format, standardisiert als STD 90 (RFC 8259), ECMA-404, und ISO/IEC 21778: 2017.

Yaml, ist ein strikter JSON-Superset und enthält zusätzliche Funktionen wie einen Begriff der Tagging-Datentypen, die Unterstützung nicht-hierarchischer Datenstrukturen, die Option zur Strukturdaten mit Einrückung und mehrere Formen von skalaren Daten, die angegeben sind. Yaml ist ein offenes Format.

Eigenschaftslisten werden für die Serialisierung von verwendet Nächster Schritt, Gn .p, Mac OS, und iOS Frameworks. Eigenschaftsliste, oder P-Liste Kurz gesagt, bezieht sich nicht auf ein einzelnes Serialisierungsformat, sondern mehrere verschiedene Varianten, einige von Menschen, die lesbar und ein Binärer sind.

Für große Volumen wissenschaftliche Datensätze wie Satellitendaten und Ausgabe von numerischen Klima-, Wetter- oder Ozeanmodellen wurden spezifische binäre Serialisierungsstandards entwickelt, z. HDF, netcdf und die älter Grib.

Programmiersprache Unterstützung

Mehrere Objekt orientierte Programmierung Sprachen unterstützen direkt Objektserialisierung (oder Objektarchiv), entweder von syntethischer Zucker Elemente oder einen Standard bereitstellen Schnittstelle dafür. Die Sprachen, die dies tun Rubin, Smalltalk, Python, Php, Ziel c, Delphi, Java, und die .NETZ Sprachenfamilie. Es stehen auch Bibliotheken zur Verfügung, in denen Sprachen, denen die native Unterstützung fehlt, Serialisierungsunterstützung hinzufügen.

C und C ++
C und C ++ Stellen Sie keine Serialisierung als eine Art hochrangiger Konstrukt an, aber beide Sprachen unterstützen das Schreiben eines der integrierten Datentypen, ebenso gut wie einfache alte Daten Strukturenals binäre Daten. Daher ist es normalerweise trivial, benutzerdefinierte Serialisierungsfunktionen zu schreiben. Darüber hinaus basierende Lösungen auf Compiler-basierten Lösungen wie die ODB Orm System für C ++ und die GSOAP Toolkit für C und C ++ können automatisch Serialisierungscode mit wenigen oder ohne Änderungen an Klassenerklärungen erstellen. Andere beliebte Serialisierungsrahmen sind Boost.Serialization[7] von dem Steigern Sie das Framework, das S11n -Framework,[8] und Müsli.[9] MFC -Framework (Microsoft) stellt auch die Serialisierungsmethode als Teil der Architektur der Dokumentenansicht bereit.
Cfml
Cfml ermöglicht es, dass Datenstrukturen serialisiert werden WDDX mit dem Tag und zu JSON mit dem Serializejson () Funktion.
Delphi
Delphi Bietet einen eingebauten Mechanismus für die Serialisierung von Komponenten (auch als persistierende Objekte bezeichnet), der vollständig in IHS integriert ist Ide. Der Inhalt der Komponente wird in einer DFM-Datei gespeichert und im Fliege neu geladen.
gehen
gehen Unterstützt nativ Unmarshalling/Marshalle von JSON und Xml Daten.[10] Es gibt auch Module von Drittanbietern, die unterstützen Yaml[11] und Protokollpuffer.[12] GO auch unterstützt GOBS.[13]
Haskell
In Haskell wird die Serialisierung für Typen unterstützt, die Mitglieder des Lese- und Show sind Geben Sie Klassen ein. Jeder Typ, der Mitglied der ist Lesen Die Typ -Klasse definiert eine Funktion, die die Daten aus der String -Darstellung der abgefallenen Daten extrahiert. Das Zeigen Geben Sie die Klasse wiederum an Show Funktion, aus der eine String -Darstellung des Objekts generiert werden kann. Der Programmierer muss die Funktionen nicht explizit definieren - maßgeblich einen Typ, der zum Ableiten von Lese- oder Ableitungen oder beides deklariert wird, kann den Compiler dazu bringen, die entsprechenden Funktionen für viele Fälle zu generieren (jedoch nicht alle: Funktionstypen beispielsweise können beispielsweise keine automatische Show abgeben oder lesen). Die automatisch generierte Instanz für Show erzeugt auch einen gültigen Quellcode, sodass der gleiche Haskell-Wert generiert werden kann, indem der Code ausgeführt wird, der durch Show in beispielsweise ein Haskell-Dolmetscher erstellt wurde.[14] Für eine effizientere Serialisierung gibt es Haskell-Bibliotheken, die eine Hochgeschwindigkeitserialisierung im binären Format ermöglichen, z. binär.
Java
Java bietet eine automatische Serialisierung, die das Objekt erfordert markiert durch Implementierung der java.io.serializable Schnittstelle. Das Implementieren der Schnittstelle markiert die Klasse als "in Ordnung, um zu serialisieren", und Java behandelt dann die Serialisierung intern. Auf dem sind keine Serialisierungsmethoden definiert Serialisierbar Schnittstelle, aber eine serialisierbare Klasse kann optional Methoden mit bestimmten speziellen Namen und Signaturen definieren, die bei definierter Weise als Teil des Serialisierungs-/Deserialisierungsprozesses aufgerufen werden. Die Sprache ermöglicht es dem Entwickler auch, den Serialisierungsprozess gründlicher zu überschreiben, indem eine andere Schnittstelle implementiert wird. Externalisierbar Schnittstelle, die zwei spezielle Methoden enthält, mit denen der Zustand des Objekts gespeichert und wiederhergestellt wird.
Es gibt drei Hauptgründe, warum Objekte standardmäßig nicht serialisierbar sind und die implementieren müssen Serialisierbar Schnittstelle zum Zugriff auf den Serialisierungsmechanismus von Java.
Erstens erfassen nicht alle Objekte nützliche Semantik in einem serialisierten Zustand. Zum Beispiel a Faden Objekt ist an den Zustand des Stroms gebunden JVM. Es gibt keinen Kontext, in dem ein Deserialisierte Faden Objekt würde nützliche Semantik beibehalten.
Zweitens ist der serialisierte Zustand eines Objekts Teil des Kompatibilitätsvertrags seiner Klassen. Die Aufrechterhaltung der Kompatibilität zwischen Versionen serialisierbarer Klassen erfordert zusätzliche Anstrengung und Berücksichtigung. Daher muss eine serialisierbare Klasse eine absichtliche Entwurfsentscheidung und keine Standardbedingung sein.
Schließlich ermöglicht die Serialisierung den Zugang zu Nichtsvorübergehend Private Mitglieder einer Klasse, die sonst nicht zugänglich sind. Klassen, die vertrauliche Informationen (z. B. ein Passwort) enthalten, sollten weder serialisierbar noch externalisierbar sein. Die Standard-Codierungsmethode verwendet eine rekursive graphbasierte Übersetzung des Klassendeskriptors und der serialisierbaren Felder des Objekts in einen Byte-Stream. Primitive sowie nicht-transiente, nicht statische Referenzobjekte werden in den Strom codiert. Jedes Objekt, auf das das serialisierte Objekt über ein Feld verwiesen wird, das nicht als markiert ist vorübergehend muss auch serialisiert werden; und wenn ein Objekt im vollständigen Graphen von nicht-transienten Objektreferenzen nicht serialisierbar ist, schlägt die Serialisierung fehl. Der Entwickler kann dieses Verhalten beeinflussen, indem sie Objekte als transient markieren oder die Serialisierung für ein Objekt neu definieren, so dass ein Teil des Referenzdiagramms abgeschnitten und nicht serialisiert wird.
Java verwendet keinen Konstruktor, um Objekte zu serialisieren. Es ist möglich, Java -Objekte durch zu serialisieren JDBC und speichern Sie sie in eine Datenbank.[15] Während Schwingen Komponenten implementieren die serialisierbare Schnittstelle, sie sind nicht garantiert tragbar zwischen verschiedenen Versionen der virtuellen Java -Maschine. Als solches kann eine Schwungkomponente oder eine beliebige Komponente, die sie erbt, in einen Byte-Stream serialisiert werden, aber es ist nicht garantiert, dass dies auf einer anderen Maschine erneut konstitierbar ist.
JavaScript
Seit ECMascript 5.1,[16] JavaScript hat den Einbau einbezogen JSON Objekt und seine Methoden Json.Parse () und Json.Stringify (). Obwohl JSON ursprünglich auf einer Teilmenge von JavaScript basiert, basiert es[17] Es gibt Grenzfälle, in denen JSON kein gültiges JavaScript ist. Insbesondere erlaubt JSON das Unicode -Linien -Terminatoren U+2028 Zeilenabscheider und U+2029 Absatzabscheider In zitierten Zeichenfolgen unabgeordnet zu erscheinen, während ECMascript 2018 und älter dies nicht tut.[18][19] Sehen Der Hauptartikel über JSON.
Julia
Julia implementiert die Serialisierung durch die serialize () / Deserialize () Module,[20] beabsichtigt, innerhalb derselben Version von Julia und/oder Instanz desselben Systembildes zu arbeiten.[21] Das Hdf5.jl Das Paket bietet eine stabilere Alternative mit einem dokumentierten Format und einer gemeinsamen Bibliothek mit Wrappern für verschiedene Sprachen.[22] Während das Standard -Serialisierungsformat voraussichtlich eher mit maximaler Leistung für die Netzwerkkommunikation konzipiert wurde.[23]
Lispeln
Im Allgemeinen a Lispeln Die Datenstruktur kann mit den Funktionen serialisiert werden. "lesen" und "drucken". Ein variabler Foo, der zum Beispiel eine Liste von Arrays enthält, wird von gedruckt von gedruckt (Druck foo). In ähnlicher Weise kann ein Objekt aus einem Stream mit dem Namen S von gelesen werden (Lesen s). Diese beiden Teile der LISP -Implementierung werden als Drucker und Leser bezeichnet. Die Ausgabe von "drucken"Ist menschlich lesbar; es verwendet Listen, die von Klammern geträumt werden, zum Beispiel: (4 2,9 "x" y). In vielen Arten von Lisp, einschließlich Common LispDer Drucker kann nicht jede Datenart darstellen, da nicht klar ist, wie dies zu tun ist. In gemeinsamer LISP kann der Drucker beispielsweise keine CLOS -Objekte drucken. Stattdessen kann der Programmierer eine Methode für die generische Funktion schreiben Druck-ObjektDies wird aufgerufen, wenn das Objekt gedruckt wird. Dies ähnelt der in Ruby verwendeten Methode. Der Lisp -Code selbst ist in die Syntax des Lesers mit dem Namen Read Syntax geschrieben. Die meisten Sprachen verwenden separate und unterschiedliche Parser, um mit Code und Daten umzugehen. Lisp verwendet nur einen. Eine Datei, die Lisp -Code enthält Read -E -druck -Schleife. Nicht alle Leser/Autoren unterstützen zyklische, rekursive oder gemeinsame Strukturen.
.NET Framework
.NET Framework hat mehrere Serialisierer entworfen von von Microsoft. Es gibt auch viele Serialisierer von Dritten. Mehr als ein Dutzend Serialisierer werden diskutiert und getestet hier.[24] und hier[25] Die Liste wächst ständig.
Ocaml
OcamlDie Standardbibliothek bietet das Marsching durch die Marschall Modul[3] und die durchdrungenen Funktionen Ausgabewert und eingegebener Wert. Während die OCAML-Programmierung statisch vom Typ überprüft wird, verwendet die Verwendung des Marschall Das Modul kann den Typ -Garantien brechen, da es keine Möglichkeit gibt, zu überprüfen, ob ein unmisshaller Stream Objekte des erwarteten Typs darstellt. In OCAML ist es schwierig, eine Funktion oder eine Datenstruktur zu marschallieren, die eine Funktion enthält (z. B. ein Objekt, das eine Methode enthält), da ausführbarer Code in Funktionen nicht über verschiedene Programme übertragen werden kann. (Es gibt eine Flagge, um die Codeposition einer Funktion zu marschieren, aber es kann nur in genau demselben Programm unbekannt werden). Die Standard -Marshallow -Funktionen können zyklische Daten aufbewahren und verarbeiten, die durch ein Flag konfiguriert werden können.
Perl
Mehrere Perl Module erhältlich von CPAN Bereitstellung von Serialisierungsmechanismen, einschließlich Lagerbar , JSON :: XS und Freezethaw. Speicherbar beinhaltet Funktionen zur Serialisierung und Deserialisierung von Perl -Datenstrukturen zu und von Dateien oder Perl -Skalaren. Neben der direkten Serialisierung direkt auf Dateien, auch Lagerbar Beinhaltet die einfrieren Funktionieren Sie eine serialisierte Kopie der in einen Skalar gepackten Daten, und auftauen einen solchen Skalar zu Deserialisieren. Dies ist nützlich, um eine komplexe Datenstruktur über einen Netzwerkbuchse zu senden oder in einer Datenbank zu speichern. Beim Serialisieren von Strukturen mit LagerbarEs gibt Netzwerk sichere Funktionen, die ihre Daten immer in einem Format speichern, das auf jedem Computer zu geringen Geschwindigkeitskosten lesbar ist. Diese Funktionen werden benannt Nstore, nfreezeusw. Es gibt keine "n" -Funktionen zur Deserialisierung dieser Strukturen - die reguläre auftauen und abrufen Deserialisieren von Strukturen, die mit dem serialisiert wurden "n"Funktionen und ihre maschinenspezifischen Äquivalente.
Php
Php ursprünglich die Serialisierung durch das integrierte Implementierung implementiert serialize () und unverzweigt () Funktionen.[26] PHP kann jeden seiner Datentypen mit Ausnahme von Ressourcen (Dateizeiger, Sockel usw.) serialisieren. Das eingebaute unverzweigt () Die Funktion ist oft gefährlich, wenn sie bei völlig nicht vertrauenswürdigen Daten verwendet werden.[27] Für Objekte gibt es zwei "Magie Methoden ", die innerhalb einer Klasse implementiert werden können - __schlafen() und __Wach auf()- die von innen gerufen werden serialize () und unverzweigt ()Dies kann ein Objekt aufräumen und wiederherstellen. Beispielsweise kann es wünschenswert sein, eine Datenbankverbindung zur Serialisierung zu schließen und die Verbindung zur Deserialisierung wiederherzustellen. Diese Funktionalität würde in diesen beiden magischen Methoden behandelt. Sie erlauben dem Objekt auch, welche Eigenschaften serialisiert werden. Da PHP 5.1, gibt es einen objektorientierten Serialisierungsmechanismus für Objekte, die Serialisierbar Schnittstelle.[28]
Prolog
Prolog's Begriff Die Struktur, die die einzige Datenstruktur der Sprache ist, kann durch das integrierte Prädikat serialisiert werden write_term/3 und serialisiert durch die eingebauten Prädikate Lesen/1 und read_term/2. Der resultierende Stream ist unkomprimierter Text (in einer Codierung, die durch Konfiguration des Zielstroms bestimmt wird), mit allen freien Variablen im Begriff, der durch Platzhalter -Variablennamen dargestellt wird. Das Prädikat write_term/3 ist in der standardisiert ISO -Spezifikation für Prolog (ISO/IEC 13211-1) auf den Seiten 59 ff. ("Schreiben eines Begriffs, § 7.10.5"). Daher wird erwartet, dass Begriffe, die durch eine Implementierung serialisiert wurden, ohne Mehrdeutigkeit oder Überraschungen von einer anderen serialisiert werden können. In der Praxis können implementierungsspezifische Erweiterungen (z. B. die Wörterbücher von Swi-Prolog) nicht standardmäßige Termstrukturen verwenden, sodass die Interoperabilität in Randfällen brechen kann. Als Beispiele finden Sie die entsprechenden Handbuchseiten für Swi-Prolog,[29] Sicstus Prolog,[30] Gnu Prolog.[31] Ob und wie serialisierte Begriffe, die über das Netzwerk empfangen werden, gegen eine Spezifikation überprüft werden (nach der Deserialisierung aus dem Zeichenstrom), wird dem Implementierer überlassen. Prologs eingebaut Bestimmte Klauselgrammatiken kann in dieser Phase angewendet werden.
Python
Der allgemeine Kernmechanismus ist der Mechanismus Essiggurke Standardbibliothek Modul, anspielt auf den Term der Datenbanksysteme Pickling[32][33][34] Datenserialisierung beschreiben (ungebunden zum Deserialisierung). Pickle verwendet einen einfachen Stack-basierten virtuelle Maschine Damit werden die Anweisungen aufgezeichnet, mit denen das Objekt rekonstruiert wurde. Es ist eine Kreuzversion anpassbar Aber unsicher (nicht sicher gegen fehlerhafte oder böswillige Daten) Serialisierungsformat. Fehlformierte oder böswillig konstruierte Daten können dazu führen, dass der Deserializer willkürliche Module importiert und ein Objekt instanziiert.[35][36] Die Standardbibliothek enthält auch Module, die serialisieren in Standarddatenformaten: JSON (Mit integrierter Unterstützung für grundlegende Skalar- und Sammelarten und in der Lage, willkürliche Typen über die Unterstützung zu unterstützen Kodierung und Dekodierung von Haken). Plistlib (Mit Unterstützung sowohl Binär- als auch XML Eigenschaftsliste Formate). xdrlib (Mit Unterstützung des Standards der externen Datendarstellung (XDR), wie in RFC 1014 beschrieben). Schließlich wird empfohlen, dass das Objekt eines Objekts __Reptr__ in der richtigen Umgebung evaluierbar sein, was es zu einer groben Übereinstimmung mit Common Lisps macht Druck-Objekt. Nicht alle Objekttypen können automatisch eingelegt werden, insbesondere solche, die halten Betriebssystem Ressourcen wie DateigriffeAber Benutzer können benutzerdefinierte "Reduktion" und Konstruktionsfunktionen registrieren, um die Wahl und Unpschnöpselung willkürlicher Typen zu unterstützen. Pickle wurde ursprünglich als reiner Python implementiert Essiggurke Modul, aber in Versionen von Python vor 3.0 die cpickle Das Modul (auch ein integriertes) bietet eine verbesserte Leistung (bis zu 1000-mal schneller[35]). Das cpickle wurde aus dem adaptiert Under Swallow Projekt. In Python 3 sollten Benutzer immer die Standardversion importieren, die versucht, die beschleunigte Version zu importieren, und fällt auf die reine Python -Version zurück.[37]
R
R hat die Funktion dput Dies schreibt eine ASCII -Textdarstellung eines R -Objekts in eine Datei oder Verbindung. Eine Darstellung kann aus einer Datei verwendet werden dget.[38] Spezifischer, die Funktion Serialisieren Serialisiert ein R -Objekt zu einer Verbindung, wobei der Ausgang ein Rohvektor ist, der im hexadezimalen Format codiert ist. Das unverzündet Die Funktion ermöglicht es, ein Objekt aus einer Verbindung oder einem Rohvektor auszulesen.[39]
Rebol
Rebol wird serialisieren, um zu versehen (Rette alle) oder zu a Saite! (Schimmel/alles). Saiten und Dateien können mit dem deserialisiert werden polymorph Belastung Funktion. Rprotobuf Bietet Cross-Language-Datenserialisierung in R, verwendet Protokollpuffer.[40]
Rubin
Rubin Enthält das Standardmodul Marschall mit 2 Methoden entsorgen und Belastung, ähnlich wie die Standard -UNIX -Dienstprogramme entsorgen und wiederherstellen. Diese Methoden serialisieren mit der Standardklasse SaiteDas heißt, sie werden effektiv zu einer Abfolge von Bytes. Einige Objekte können nicht serialisiert werden (dies würde a erhöhen a Typeerror Ausnahme): Bindungen, Prozedurobjekte, Instanzen von Klassen -IO, Singleton -Objekten und Schnittstellen. Wenn eine Klasse eine benutzerdefinierte Serialisierung erfordert (z. B. bestimmte Reinigungsaktionen zum Dumping / Wiederherstellen), kann dies durch die Implementierung von 2 Methoden erfolgen: _entsorgen und _Belastung. Die Instanzmethode _entsorgen sollte zurückkehren a Saite Objekt, das alle Informationen enthält, die erforderlich sind, um Objekte dieser Klasse zu rekonstituieren, und alle referenzierten Objekte bis zu einer maximalen Tiefe als Ganzzahlparameter (ein Wert von -1 impliziert, dass die Tiefenprüfung deaktiviert werden sollte). Die Klassenmethode _Belastung sollte a nehmen Saite und geben Sie ein Objekt dieser Klasse zurück.
Rost
Serde ist die am weitesten verbreitete Bibliothek oder Kiste für die Serialisierung in Rost.
Smalltalk
Im Allgemeinen können nicht rekursive und nicht-Sharing-Objekte in einer menschlichen lesbaren Form mit dem gespeichert und abgerufen werden Storeon:/ReadFrom: Protokoll. Das Storeon: Die Methode erzeugt den Text eines SmallTalk -Ausdrucks, der - bei der Bewertung verwendet ReadFrom: - das ursprüngliche Objekt nachbilden. Dieses Schema ist insofern besonders, als es eine prozedurale Beschreibung des Objekts verwendet, nicht der Daten selbst. Es ist daher sehr flexibel, so dass Klassen kompaktere Darstellungen definieren können. In seiner ursprünglichen Form wird jedoch keine zyklischen Datenstrukturen verarbeitet und die Identität gemeinsamer Referenzen erhalten (d. H. Zwei Referenzen, die ein einzelnes Objekt als Verweise auf zwei gleiche, aber nicht identische Kopien wiederhergestellt werden). Dafür gibt es verschiedene tragbare und nicht portable Alternativen. Einige von ihnen sind spezifisch für eine bestimmte SmallTalk -Implementierung oder Klassenbibliothek. Es gibt verschiedene Möglichkeiten in Quietschen SmallTalk Objekte serialisieren und speichern. Die einfachsten und am häufigsten verwendeten sind Storeon:/readfrom: und binäre Speicherformate basierend auf SmarTrefstream Serialisierer. Darüber hinaus können gebündelte Objekte mit Verwendung gespeichert und abgerufen werden Imagesegmente. Beide bieten einen sogenannten "Binary-Object-Speicher-Framework", der die Serialisierung in eine kompakte Binärform unterstützen und abrufen. Beide verarbeiten zyklische, rekursive und gemeinsame Strukturen, Speicher/Abruf von Klassen- und Metaklassinformationen und enthalten Mechanismen für "On the Fly" -Objektmigration (d. H. Um Instanzen zu konvertieren, die von einer älteren Version einer Klasse mit einem anderen Objektlayout geschrieben wurden). Die APIs sind ähnlich (Speicher-/ReadBinary), die Codierungsdetails sind jedoch unterschiedlich, was diese beiden Formate nicht kompatibel macht. Der SmallTalk/X-Code ist jedoch Open Source und frei und kann in andere SmallTalks geladen werden, um das Cross-Dialect-Objektwechsel zu ermöglichen. Die Objektserialisierung ist nicht Teil der ANSI -SmallTalk -Spezifikation. Infolgedessen variiert der Code zur Serialisierung eines Objekts durch SmallTalk -Implementierung. Die resultierenden binären Daten variieren ebenfalls. Beispielsweise kann ein in Squeak SmallTalk erstellter serialisiertes Objekt in Ambrai SmallTalk nicht wiederhergestellt werden. Infolgedessen können verschiedene Anwendungen, die an mehreren SmallTalk -Implementierungen arbeiten, die sich auf die Objekt -Serialisierung stützen, keine Daten zwischen diesen verschiedenen Implementierungen teilen. Diese Anwendungen enthalten die Minnestore -Objektdatenbank[41] und einige RPC Pakete. Eine Lösung für dieses Problem ist Sixx "Was gibt's Neues". Sixx - SmallTalk -Instanzaustausch in XML. 23. Januar 2010. Abgerufen 25. Juli 2021., which is a package for multiple Smalltalks that uses an Xml-Basis Format zur Serialisierung.
Schnell
Das Schnell Standardbibliothek bietet zwei Protokolle, Codierbar und Dekodierbar (zusammen komponiert als Codierbar), die es ermöglichen, dass Instanzen von konformen Typen serialisiert werden oder von Deserialisierung JSON, Eigenschaftslistenoder andere Formate.[42] Standardimplementierungen dieser Protokolle können vom Compiler für Typen generiert werden, deren gespeicherte Eigenschaften ebenfalls sind Dekodierbar oder Codierbar.
Windows PowerShell
Windows PowerShell implementiert die Serialisierung durch die eingebaut cmdlet Export-clixml. Export-clixml Serialisiert .NET -Objekte und speichert die resultierende XML in einer Datei. Verwenden Sie die Objekte, um die Objekte zu rekonstituieren, die Import-clixml CMDLET, das in der exportierten Datei ein von der XML deserialisiertes Objekt aus dem XML generiert. Deserialisierte Objekte, oft als "Eigenschaftstaschen" bezeichnet, sind keine lebenden Objekte. Es sind Schnappschüsse mit Eigenschaften, aber keine Methoden. Zwei dimensionale Datenstrukturen können auch in (DE) serialisiert werden in CSV Format mit den eingebauten CMDlets Import-CSV und Export-CSV.

Siehe auch

Verweise

  1. ^ Cline, Marshall. "C ++ FAQ:" Worum geht es in dieser "Serialisierung"? "". Archiviert von das Original Am 2015-04-05. Sie können ein Objekt oder eine Gruppe von Objekten aufnehmen, sie auf eine Festplatte setzen oder sie durch einen Draht- oder drahtlosen Transportmechanismus senden, später, möglicherweise auf einem anderen Computer, den Prozess umkehren und die ursprünglichen Objekte (n) wieder aufleben lassen. Die grundlegenden Mechanismen sind es, Objekte in einen eindimensionalen Bitstrom abzuflachen und diesen Strom von Bits wieder in die ursprünglichen Objekte zu verwandeln.
  2. ^ "Modul: Marschall (Ruby 3.0.2)". Ruby-doc.org. Abgerufen 25. Juli 2021.
  3. ^ a b "Marschall". Ocaml. Abgerufen 25. Juli 2021.
  4. ^ "Python 3.9.6 Dokumentation - Python -Objekt -Serialisierung - Pickle". Dokumentation - Die Python Standard Library.
  5. ^ S. Miller, Mark. "Sichere Serialisierung unter gegenseitigem Verdacht". Erights.org. Die nachstehend erläuterte Serialisierung ist ein Beispiel für ein Tool zur Verwendung durch Objekte in einem Objektsystem zum Betrieb in der Grafik, in die sie eingebettet sind. Dies scheint eine Verletzung der vom reinen Objektmodell bereitgestellten Einkapselung zu erfordern.
  6. ^ Sun Microsystems (1987). "XDR: Externe Datenrepräsentation Standard". RFC 1014. Netzwerkarbeitsgruppe. Abgerufen 11. Juli, 2011.
  7. ^ "Serialisierung". www.boost.org.
  8. ^ Beal, Stephan. "s11n.net: Objektserialisierung/Persistenz in C ++". s11n.net.
  9. ^ "Müsli -Dokumente - Haupt". uscilab.github.io.
  10. ^ "Paketcodierung". pkg.go.dev. 12. Juli 2021.
  11. ^ "Github - YAML -Unterstützung für die Go -Sprache". GitHub. Abgerufen 25. Juli 2021.
  12. ^ "Proto · pkg.go.dev". pkg.go.dev. Abgerufen 2021-06-22.
  13. ^ "GOB -Paket - Codierung/Gob - pkg.go.dev". pkg.go.dev. Abgerufen 2022-03-04.
  14. ^ "Text.show dokumentation". Abgerufen 15. Januar 2014.
  15. ^ "Ask Tom" Serialisierung von Java -Objekten in die Datenbank (und GE ... "". Asktom.oracle.com.
  16. ^ "Json". MDN Web Docs. Abgerufen 22. März 2018.
  17. ^ "Json". www.json.org. Abgerufen 22. März 2018.
  18. ^ Holm, Magnus (15. Mai 2011). "JSON: Die JavaScript -Untergruppe, die es nicht ist". Das zeitlose Repository. Abgerufen 23. September 2016.
  19. ^ "TC39 Vorschlag: Subsume JSON". ECMA TC39 Komitee. 22. Mai 2018.
  20. ^ "Serialisierung". Die Julia -Sprache. Abgerufen 25. Juli 2021.
  21. ^ "Schnellere und kompaktere Serialisierung von Symbolen und Saiten · Julialang/Julia@bb67ff2". GitHub.
  22. ^ "HDF5.JL: Speichern und Laden von Daten im HDF5 -Dateiformat". 20. August 2017 - über Github.
  23. ^ "Julia: Wie stabil ist serialize () / Deserialize ()". stackoverflow.com. 2014.
  24. ^ ".NET Serializer". Es gibt viele Arten von Serialisierern; Sie erzeugen sehr kompakte Daten sehr schnell. Es gibt Serialisierer für Messaging, für Datenspeicher, um Objekte zu sammeln. Was ist der beste Serializer in .NET?
  25. ^ "Serbench von Aumcode". aumcode.github.io.
  26. ^ "PHP: Objektserialisierung - Handbuch". ca.php.net.
  27. ^ Esser, Stephen (2009-11-28). "Schockierende Nachrichten in der PHP -Ausbeutung". Verdammt ... Archiviert von das Original Am 2012-01-06.
  28. ^ "PHP: Serialisierbar - Handbuch". www.php.net.
  29. ^ ""Begriff Lesen und Schreiben"". www.swi-prolog.org.
  30. ^ ""write_term/[2,3]"". sicstus.sics.se.
  31. ^ ""Term Input/Output"". gprolog.org.
  32. ^ Herlihy, Maurice; Liskov, Barbara (Oktober 1982). "Eine Mehrwertübertragungsmethode für abstrakte Datentypen" (PDF). ACM -Transaktionen zu Programmiersprachen und Systemen. 4 (4): 527–551. Citeseerx 10.1.1.87.5301. doi:10.1145/69622.357182. ISSN 0164-0925. OCLC 67989840. S2CID 8126961.
  33. ^ Birrell, Andrew; Jones, Mike; Wobber, Ted (November 1987). "Eine einfache und effiziente Implementierung für kleine Datenbanken". ACM SIGOPS -Betriebssysteme Überprüfung: Verfahren des 11. ACM -Symposiums für Betriebssystemprinzipien. 11 (5): 149–154. Citeseerx 10.1.1.100.1457. doi:10.1145/41457.37517. ISSN 0163-5980. OCLC 476062921. S2CID 12908261. Unsere Implementierung nutzt einen Mechanismus namens „Gurken“, der zwischen einer stark typisierten Datenstruktur und einer Darstellung dieser Struktur umwandelt, die für die Speicherung von dauerhaften Festplattendateien geeignet ist. Die Operation Pickle.Write nimmt einen Zeiger auf eine stark typisierte Datenstruktur und liefert Bit -Puffer zum Schreiben auf die Festplatte. Umgekehrt pickle.read liest Bit -Puffer von der Festplatte und liefert eine Kopie der ursprünglichen Datenstruktur. (*) Diese Umwandlung beinhaltet die Identifizierung der Vorkommen von Adressen in der Struktur und das Anordnen, wenn die Struktur von der Festplatte zurückgelesen wird Ersetzt durch Adressen, die in der aktuellen Ausführungsumgebung gültig sind. Der Gurkenmechanismus ist vollständig automatisch: Er wird von den Tippstrukturen für Laufzeitstrukturen angetrieben, die für unseren Mülleimermechanismus vorhanden sind. ... (*) Die Wickelung ist dem Konzept der Marshalle in Remote -Verfahrensanrufen ziemlich ähnlich. Tatsächlich funktioniert unsere Implementierung von Wickeln jedoch nur durch Interpretation der Struktur der dynamisch typisierten Werte zur Laufzeit, während unsere RPC-Implementierung nur durch Generieren von Code für das Marshalle statisch typisierter Werte funktioniert. Jede Einrichtung würde davon profitieren, die Mechanismen der anderen hinzuzufügen, aber das ist noch nicht getan.
  34. ^ Van Rossum, Guido (1. Dezember 1994). "Abflachende Python -Objekte". Python -Programmiersprache - Legacy -Website. Delaware, Vereinigte Staaten: Python Software Foundation. Abgerufen 6. April 2017. Ursprung des Namens 'Abflachung': Weil ich das Original -Marschallmodul allein lassen möchte, und Jim beschwerte Der Begriff "Abflachende" von nun an. ... (Das Modula-3-System verwendet den Begriff "eingelegte" Daten für dieses Konzept. Sie haben wahrscheinlich bereits alle Probleme gelöst und auf Typ-Sicherheit :-)
  35. ^ a b "11.1. Pickle - Python -Objekt -Serialisierung - Python 2.7.14RC1 -Dokumentation". docs.python.org.
  36. ^ "Pickle - Python -Objekt -Serialisierung - Python v3.0.1 Dokumentation". docs.python.org.
  37. ^ "Was ist neu in Python 3.0 - Python v3.1.5 Dokumentation". docs.python.org.
  38. ^ [R -Handbuch http://stat.ethz.ch/r-manual/r-patched/library/base/html/dput.html]
  39. ^ [R -Handbuch http://stat.ethz.ch/r-manual/r-patched/library/base/html/serialize.html]
  40. ^ Eddelbuettel, Dirk; Stokely, Murray; Ooms, Jeroen (2014). "RPROTOBUF: Effiziente Cross-Language-Datenserialisierung in R". Journal of Statistical Software. 71 (2). Arxiv:1401.7372. doi:10.18637/js.v071.i02. S2CID 36239952.
  41. ^ "Minnestore Version 2". SourceForge. Archiviert von das Original am 11. Mai 2005.
  42. ^ "Swift Archival & Serialization". www.github.com. 2018-12-02.

Externe Links