Articulo de referencia

Publicación por entregas

Diagrama de flujo En informática, la serialización (o serialización , también conocida como pickling en Python ) es el proceso de traducir una estructura de datos o el estado de...

Diagrama de flujo

En informática, la serialización (o serialización , también conocida como pickling en Python ) es el proceso de traducir una estructura de datos o el estado de un objeto a un formato que se puede almacenar (por ejemplo, archivos en dispositivos de almacenamiento secundario , búferes de datos en dispositivos de almacenamiento primario) o transmitir (por ejemplo, flujos de datos a través de redes informáticas ) y reconstruir posteriormente (posiblemente en un entorno informático diferente). [ 1 ] Cuando la serie de bits resultante se relee según el formato de serialización, se puede utilizar para crear un clon semánticamente idéntico del objeto original. Para muchos objetos complejos, como aquellos que hacen un uso extensivo de referencias , este proceso no es sencillo. La serialización de objetos no incluye ninguno de sus métodos asociados con los que estaban previamente vinculados.

Este proceso de serializar un objeto también se denomina marshalling en algunas situaciones. [ 2 ] [ 3 ] [ 4 ] La operación opuesta, extraer una estructura de datos de una serie de bytes, es la deserialización (también llamada deserialización o desmarshalling ).

En el hardware de equipos de red, la parte responsable de la serialización y deserialización se denomina comúnmente SerDes .

Usos

Entre los usos de la serialización se incluyen:

Para que algunas de estas características sean útiles, es necesario mantener la independencia de la arquitectura. Por ejemplo, para un uso óptimo de la distribución, un ordenador que se ejecute en una arquitectura de hardware diferente debería poder reconstruir de forma fiable un flujo de datos serializado, independientemente del orden de bytes . Esto significa que el procedimiento más sencillo y rápido de copiar directamente la disposición en memoria de la estructura de datos no puede funcionar de forma fiable en todas las arquitecturas. Serializar la estructura de datos en un formato independiente de la arquitectura evita los problemas de ordenación de bytes , disposición en memoria o, simplemente, las diferentes formas de representar estructuras de datos en distintos lenguajes de programación .

Inherente a cualquier esquema de serialización, dado que la codificación de los datos es por definición serial, extraer una parte de la estructura de datos serializada requiere leer el objeto completo de principio a fin y reconstruirlo. En muchas aplicaciones, esta linealidad es una ventaja, ya que permite utilizar interfaces de E/S sencillas y comunes para almacenar y transmitir el estado de un objeto. En aplicaciones donde el rendimiento es crucial, puede ser conveniente invertir más esfuerzo en gestionar una organización de almacenamiento no lineal más compleja.

Incluso en una sola máquina, los objetos puntero primitivos son demasiado frágiles para guardarlos, ya que los objetos a los que apuntan pueden recargarse en una ubicación diferente de la memoria. Para solucionar esto, el proceso de serialización incluye un paso llamado descifrado o descifrado de punteros , donde las referencias directas a punteros se convierten en referencias basadas en el nombre o la posición. El proceso de deserialización incluye un paso inverso llamado descifrado de punteros .

Dado que tanto la serialización como la deserialización pueden controlarse desde código común (por ejemplo, la función Serialize en Microsoft Foundation Classes ), es posible que dicho código realice ambas operaciones simultáneamente, permitiendo así: 1) detectar diferencias entre los objetos que se están serializando y sus copias anteriores, y 2) proporcionar la entrada para la siguiente detección. No es necesario crear la copia anterior, ya que las diferencias pueden detectarse sobre la marcha, una técnica denominada ejecución diferencial. Esto resulta útil en la programación de interfaces de usuario cuyo contenido varía con el tiempo  : los objetos gráficos pueden crearse, eliminarse, modificarse o gestionar eventos de entrada sin necesidad de escribir código independiente para ello.

Desventajas

La serialización rompe la opacidad de un tipo de dato abstracto al exponer potencialmente detalles de implementación privados. Las implementaciones triviales que serializan todos los miembros de datos pueden violar la encapsulación . [ 5 ]

Para disuadir a la competencia de crear productos compatibles, los desarrolladores de software propietario suelen mantener en secreto los detalles de los formatos de serialización de sus programas . Algunos incluso los ocultan o cifran deliberadamente . Sin embargo, la interoperabilidad exige que las aplicaciones puedan comprender los formatos de serialización de las demás. Por lo tanto, las arquitecturas de llamadas a métodos remotos, como CORBA, definen sus formatos de serialización con todo detalle.

Muchas instituciones, como archivos y bibliotecas, intentan garantizar la vigencia futura de sus archivos de respaldo , en particular de las copias de seguridad de las bases de datos , almacenándolos en algún formato serializado relativamente legible para los humanos .

Formatos de serialización

La tecnología Courier de Xerox Network Systems a principios de la década de 1980 influyó en el primer estándar ampliamente adoptado. Sun Microsystems publicó la Representación de Datos Externos (XDR) en 1987. [ 6 ] XDR es un formato abierto y estandarizado como STD 67 (RFC 4506) por IETF .

A finales de la década de 1990, se inició un esfuerzo por ofrecer una alternativa a los protocolos de serialización estándar: XML , un subconjunto de SGML , se utilizó para producir una codificación basada en texto legible por humanos . Dicha codificación puede ser útil para objetos persistentes que pueden ser leídos y comprendidos por humanos o comunicados a otros sistemas independientemente del lenguaje de programación. Tiene la desventaja de perder la codificación más compacta basada en flujo de bytes, pero para entonces, las mayores capacidades de almacenamiento y transmisión hicieron que el tamaño de los archivos fuera una preocupación menor que en los inicios de la informática. En la década de 2000, XML se utilizó con frecuencia para la transferencia asíncrona de datos estructurados entre cliente y servidor en aplicaciones web Ajax . XML es un formato abierto y estandarizado como recomendación del W3C.

JSON es una alternativa ligera de texto plano a XML y se usa comúnmente para la comunicación cliente-servidor en aplicaciones web. JSON se basa en la sintaxis de JavaScript , pero es independiente de JavaScript y compatible con muchos otros lenguajes de programación. JSON está estandarizado como STD 90 ( RFC 8259 ), ECMA-404 e ISO/IEC 21778:2017 . 

YAML es un superconjunto estricto de JSON e incluye características adicionales como etiquetas de tipo de datos, compatibilidad con estructuras de datos cíclicas, sintaxis sensible a la indentación y múltiples formas de citar datos escalares. YAML es un formato abierto.

Las listas de propiedades se utilizan para la serialización en los frameworks NeXTSTEP , GNUstep , macOS e iOS . El término " lista de propiedades" (o p-list , por sus siglas en inglés) no se refiere a un único formato de serialización, sino a varias variantes diferentes: algunas legibles por humanos y una binaria.

Para conjuntos de datos científicos de gran volumen, como datos satelitales y resultados de modelos numéricos climáticos, meteorológicos u oceánicos, se han desarrollado estándares de serialización binaria específicos, por ejemplo, HDF , netCDF y el antiguo GRIB .

Compatibilidad con lenguajes de programación

Varios lenguajes de programación orientados a objetos admiten directamente la serialización de objetos (o el archivado de objetos ), ya sea mediante elementos sintácticos o proporcionando una interfaz estándar para ello. Entre los lenguajes que lo hacen se incluyen Ruby , Smalltalk , Python , PHP , Objective-C , Delphi , Java y la familia de lenguajes .NET . También existen bibliotecas que añaden soporte para la serialización a lenguajes que carecen de soporte nativo.

C y C++

C y C++ no proporcionan serialización como una construcción de alto nivel, pero ambos lenguajes admiten escribir cualquiera de los tipos de datos integrados , así como estructuras de datos simples , como datos binarios. Por lo tanto, suele ser trivial escribir funciones de serialización personalizadas. Además, las soluciones basadas en compiladores, como el sistema ORM ODB para C++ y el kit de herramientas gSOAP para C y C++, son capaces de producir automáticamente código de serialización con pocas o ninguna modificación en las declaraciones de clase. Otros marcos de serialización populares son Boost.Serialization [ 7 ] del marco Boost , el marco S11n [ 8 ] y Cereal [ 9 ] . El marco MFC (Microsoft) también proporciona metodología de serialización como parte de su arquitectura Document-View.

Con la introducción de la programación reflexiva en C++26 , la serialización se ha simplificado enormemente. La reflexión permite la serialización en tiempo de compilación de, por ejemplo, JSON en un objeto structcon la estructura correspondiente. [ 10 ]

CFML

CFML permite serializar estructuras de datos a WDDX con la <cfwddx>etiqueta y a JSON con la función SerializeJSON() .

Delfos

Delphi proporciona un mecanismo integrado para la serialización de componentes (también llamados objetos persistentes), que está completamente integrado con su IDE . El contenido del componente se guarda en un archivo DFM y se recarga sobre la marcha.

Ir

Go admite de forma nativa la serialización/deserialización de datos JSON y XML . [ 11 ] También hay módulos de terceros que admiten YAML [ 12 ] y Protocol Buffers . [ 13 ] Go también admite Gobs . [ 14 ]

Haskell

En Haskell, la serialización es compatible con los tipos que son miembros de las clases de tipos Read y Show . Cada tipo que es miembro de la Readclase de tipos define una función que extraerá los datos de la representación de cadena de los datos volcados. La Showclase de tipos, a su vez, contiene la showfunción a partir de la cual se puede generar una representación de cadena del objeto. El programador no necesita definir las funciones explícitamente; simplemente declarando que un tipo deriva de Read o deriva de Show, o ambos, puede hacer que el compilador genere las funciones apropiadas para muchos casos (pero no todos: los tipos de función, por ejemplo, no pueden derivar automáticamente Show o Read). La instancia autogenerada para Show también produce código fuente válido, por lo que se puede generar el mismo valor de Haskell ejecutando el código producido por show en, por ejemplo, un intérprete de Haskell. [ 15 ] Para una serialización más eficiente, existen bibliotecas de haskell que permiten la serialización de alta velocidad en formato binario, por ejemplo binary .

Java

Java provides automatic serialization which requires that the object be marked by implementing the java.io.Serializableinterface. Implementing the interface marks the class as "okay to serialize", and Java then handles serialization internally. There are no serialization methods defined on the Serializable interface, but a serializable class can optionally define methods with certain special names and signatures that if defined, will be called as part of the serialization/deserialization process. The language also allows the developer to override the serialization process more thoroughly by implementing another interface, the Externalizable interface, which includes two special methods that are used to save and restore the object's state. There are three primary reasons why objects are not serializable by default and must implement the Serializable interface to access Java's serialization mechanism.Firstly, not all objects capture useful semantics in a serialized state. For example, a Thread object is tied to the state of the current JVM. There is no context in which a deserialized Thread object would maintain useful semantics.Secondly, the serialized state of an object forms part of its class' compatibility contract. Maintaining compatibility between versions of serializable classes requires additional effort and consideration. Therefore, making a class serializable needs to be a deliberate design decision and not a default condition.Lastly, serialization allows access to non-transient private members of a class that are not otherwise accessible. Classes containing sensitive information (for example, a password) should not be serializable nor externalizable.[16]:339–345 The standard encoding method uses a recursive graph-based translation of the object's class descriptor and serializable fields into a byte stream. Primitives as well as non-transient, non-static referenced objects are encoded into the stream. Each object that is referenced by the serialized object via a field that is not marked as transient must also be serialized; and if any object in the complete graph of non-transient object references is not serializable, then serialization will fail. The developer can influence this behavior by marking objects as transient, or by redefining the serialization for an object so that some portion of the reference graph is truncated and not serialized. Java does not use constructor to serialize objects. It is possible to serialize Java objects through JDBC and store them into a database.[17] While SwingAunque los componentes implementan la interfaz Serializable, no se garantiza su portabilidad entre diferentes versiones de la Máquina Virtual de Java. Por lo tanto, un componente Swing, o cualquier componente que la herede, puede serializarse a un flujo de bytes, pero no se garantiza que este pueda reconstruirse en otra máquina.

JavaScript

Desde ECMAScript 5.1, [ 18 ] JavaScript ha incluido el objeto integrado JSONy sus métodos JSON.parse()y JSON.stringify(). Aunque JSON se basa originalmente en un subconjunto de JavaScript, [ 19 ] existen casos límite en los que JSON no es JavaScript válido. Específicamente, JSON permite que los terminadores de línea Unicode U+2028 LINE SEPARATOR y U+2029 PARAGRAPH SEPARATOR aparezcan sin escape en cadenas entre comillas, mientras que ECMAScript 2018 y versiones anteriores no lo permiten. [ 20 ] [ 21 ] Véase el artículo principal sobre JSON .

Julia

Julia implementa la serialización a través de los módulos serialize()/ , [ 22 ] destinados a funcionar dentro de la misma versión de Julia y/o instancia de la misma imagen del sistema. [ 23 ] El paquete ofrece una alternativa más estable, utilizando un formato documentado y una biblioteca común con adaptadores para diferentes lenguajes, [ 24 ] mientras que se sugiere que el formato de serialización predeterminado fue diseñado pensando en el máximo rendimiento para la comunicación de red. [ 25 ]deserialize()HDF5.jl

Ceceo

Generalmente, una estructura de datos Lisp se puede serializar con las funciones " read" y " print". Una variable foo que contiene, por ejemplo, una lista de arreglos se imprimiría con (print foo). De manera similar, un objeto se puede leer desde un flujo llamado s con (read s). Estas dos partes de la implementación de Lisp se llaman Impresora y Lector. La salida de " print" es legible para humanos; utiliza listas delimitadas por paréntesis, por ejemplo: . En muchos tipos de Lisp, incluido Common Lisp , la impresora no puede representar todos los tipos de datos porque no está claro cómo hacerlo. En Common Lisp, por ejemplo, la impresora no puede imprimir objetos CLOS. En su lugar, el programador puede escribir un método en la función genérica , que se invocará cuando se imprima el objeto. Esto es algo similar al método utilizado en Ruby. El código Lisp en sí está escrito en la sintaxis del lector, llamada sintaxis de lectura. La mayoría de los lenguajes utilizan analizadores separados y diferentes para manejar el código y los datos, Lisp solo usa uno. Un archivo que contiene código Lisp puede leerse en memoria como una estructura de datos, transformarse mediante otro programa y, posteriormente, ejecutarse o escribirse, por ejemplo, en un bucle de lectura-evaluación-impresión . No todos los lectores/escritores admiten estructuras cíclicas, recursivas o compartidas.(42.9"x"y)print-object

.NETO

.NET cuenta con varios serializadores diseñados por Microsoft . También existen numerosos serializadores de terceros. Más de una docena de serializadores se analizan y prueban aquí (Archivado el 8 de mayo de 2015 en Wayback Machine) [ 26 ] y aquí [ 27 ] .

OCaml

La biblioteca estándar de OCamlMarshal proporciona serialización a través del módulo [ 3 ] y las funciones Pervasives output_valuey input_value. Si bien la programación en OCaml se verifica estáticamente, el uso del Marshalmódulo puede romper las garantías de tipo, ya que no hay forma de verificar si un flujo deserializado representa objetos del tipo esperado. En OCaml es difícil serializar una función o una estructura de datos que contiene una función (por ejemplo, un objeto que contiene un método), porque el código ejecutable en las funciones no se puede transmitir entre diferentes programas. (Hay una bandera para serializar la posición del código de una función, pero solo se puede deserializar en el mismo programa). Las funciones de serialización estándar pueden preservar el uso compartido y manejar datos cíclicos, que se pueden configurar mediante una bandera.

Perl

Varios módulos Perl disponibles en CPAN proporcionan mecanismos de serialización, incluyendo Storabley JSON::XS. FreezeThawStorable incluye funciones para serializar y deserializar estructuras de datos Perl hacia y desde archivos o escalares Perl. Además de serializar directamente a archivos, Storableincluye la freezefunción para devolver una copia serializada de los datos empaquetados en un escalar, y thawpara deserializar dicho escalar. Esto es útil para enviar una estructura de datos compleja a través de un socket de red o almacenarla en una base de datos. Al serializar estructuras con Storable, hay funciones seguras para la red que siempre almacenan sus datos en un formato que es legible en cualquier computadora a un pequeño costo de velocidad. Estas funciones se llaman nstore, nfreeze, etc. No hay funciones "n" para deserializar estas estructuras  : las estructuras regulares thawy retrievedeserializan las estructuras serializadas con las nfunciones " " y sus equivalentes específicos de la máquina.

PHP

PHP implementó originalmente la serialización a través de las funciones integradas `serialize` serialize()y `deserialize` unserialize(). [ 28 ] PHP puede serializar cualquiera de sus tipos de datos excepto los recursos (punteros de archivo, sockets, etc.). La función integrada unserialize()suele ser peligrosa cuando se usa con datos completamente no confiables. [ 29 ] Para los objetos, hay dos " métodos mágicos " que se pueden implementar dentro de una clase  __sleep()y __wakeup() — que se llaman desde dentro de serialize()y unserialize(), respectivamente, que pueden limpiar y restaurar un objeto. Por ejemplo, puede ser deseable cerrar una conexión de base de datos al serializar y restaurar la conexión al deserializar; esta funcionalidad se manejaría en estos dos métodos mágicos. También permiten que el objeto elija qué propiedades se serializan. Desde PHP 5.1, existe un mecanismo de serialización orientado a objetos para objetos, la Serializableinterfaz `serialize`. [ 30 ]

Prólogo

La estructura de términos de Prolog , que es la única estructura de datos del lenguaje, puede serializarse mediante el predicado incorporado write_term/3y serializarse mediante los predicados incorporados read/1y read_term/2. El flujo resultante es texto sin comprimir (en alguna codificación determinada por la configuración del flujo de destino), con cualquier variable libre en el término representada por nombres de variables de marcador de posición. El predicado write_term/3está estandarizado en la Especificación ISO para Prolog (ISO/IEC 13211-1) en las páginas 59 y siguientes ("Escritura de un término, § 7.10.5"). Por lo tanto, se espera que los términos serializados por una implementación puedan serializarse por otra sin ambigüedad ni sorpresas. En la práctica, las extensiones específicas de la implementación (por ejemplo, los diccionarios de SWI-Prolog) pueden usar estructuras de términos no estándar, por lo que la interoperabilidad puede romperse en casos límite. Como ejemplos, véanse las páginas del manual correspondientes para SWI-Prolog, [ 31 ] SICStus Prolog, [ 32 ] GNU Prolog. [ 33 ] La forma en que se verifican los términos serializados recibidos a través de la red con respecto a una especificación (después de la deserialización del flujo de caracteres) queda a criterio del implementador. En esa etapa se pueden aplicar las gramáticas de cláusulas definidas integradas de Prolog .

Pitón

The core general serialization mechanism is the picklestandard library module, alluding to the database systems term pickling[34][35][36] to describe data serialization (unpickling for deserializing). Pickle uses a simple stack-based virtual machine that records the instructions used to reconstruct the object. It is a cross-version customizable but unsafe (not secure against erroneous or malicious data) serialization format. Malformed or maliciously constructed data, may cause the deserializer to import arbitrary modules and instantiate any object.[37][38] The standard library also includes modules serializing to standard data formats: json (with built-in support for basic scalar and collection types and able to support arbitrary types via encoding and decoding hooks). plistlib (with support for both binary and XML property list formats). xdrlib (with support for the External Data Representation (XDR) standard as described in RFC 1014). Finally, it is recommended that an object's __repr__ be evaluable in the right environment, making it a rough match for Common Lisp's print-object. Not all object types can be pickled automatically, especially ones that hold operating system resources like file handles, but users can register custom "reduction" and construction functions to support the pickling and unpickling of arbitrary types. Pickle was originally implemented as the pure Python pickle module, but, in versions of Python prior to 3.0, the cPickle module (also a built-in) offers improved performance (up to 1000 times faster[37]). The cPickle was adapted from the Unladen Swallow project. In Python 3, users should always import the standard version, which attempts to import the accelerated version and falls back to the pure Python version.[39]

R

R has the function dput which writes an ASCII text representation of an R object to a file or connection. A representation can be read from a file using dget.[40] More specific, the function serialize serializes an R object to a connection, the output being a raw vector coded in hexadecimal format. The unserialize function allows to read an object from a connection or a raw vector.[41]

REBOL

REBOL will serialize to file (save/all) or to a string! (mold/all). Strings and files can be deserialized using the polymorphicload function. RProtoBuf provides cross-language data serialization in R, using Protocol Buffers.[42]

Ruby

Ruby includes the standard module Marshal with 2 methods dump and load, akin to the standard Unix utilities dump and restore. These methods serialize to the standard class String, that is, they effectively become a sequence of bytes. Some objects cannot be serialized (doing so would raise a TypeError exception): bindings, procedure objects, instances of class IO, singleton objects and interfaces. If a class requires custom serialization (for example, it requires certain cleanup actions done on dumping / restoring), it can be done by implementing 2 methods: _dump and _load. The instance method_dump should return a String object containing all the information necessary to reconstitute objects of this class and all referenced objects up to a maximum depth given as an integer parameter (a value of -1 implies that depth checking should be disabled). The class method_load should take a String and return an object of this class.

Rust

Our example struct Point implements the Serialize and Deserialize traits

Serde is the most widely used library, or crate, for serialization in Rust which provides the Serialize and Deserialize traits.

Smalltalk

En general, los objetos no recursivos y no compartidos se pueden almacenar y recuperar en un formato legible para humanos utilizando el protocolo storeOn:/ . El método genera el texto de una expresión Smalltalk que, al evaluarse utilizando , recrea el objeto original. Este esquema es especial, ya que utiliza una descripción procedimental del objeto, no los datos en sí. Por lo tanto, es muy flexible, lo que permite a las clases definir representaciones más compactas. Sin embargo, en su forma original, no maneja estructuras de datos cíclicas ni conserva la identidad de las referencias compartidas (es decir, dos referencias a un solo objeto se restaurarán como referencias a dos copias iguales, pero no idénticas). Para esto, existen varias alternativas portátiles y no portátiles. Algunas de ellas son específicas de una implementación de Smalltalk o biblioteca de clases en particular. Hay varias formas en Squeak Smalltalk de serializar y almacenar objetos. Las más fáciles y utilizadas son los formatos de almacenamiento binario basados ​​en serializadores. Además, los objetos agrupados se pueden almacenar y recuperar utilizando . Ambos proporcionan un marco de almacenamiento de objetos binarios que admite la serialización y recuperación en formato binario compacto. Ambos manejan estructuras cíclicas, recursivas y compartidas, el almacenamiento y la recuperación de información de clases y metaclases , e incluyen mecanismos para la migración de objetos "sobre la marcha" (es decir, para convertir instancias escritas por una versión anterior de una clase con una estructura de objetos diferente). Las API son similares (storeBinary/readBinary), pero los detalles de codificación son diferentes, lo que hace que estos dos formatos sean incompatibles. Sin embargo, el código de Smalltalk/X es de código abierto y gratuito, y puede cargarse en otras implementaciones de Smalltalk para permitir el intercambio de objetos entre dialectos. La serialización de objetos no forma parte de la especificación ANSI Smalltalk. Como resultado, el código para serializar un objeto varía según la implementación de Smalltalk. Los datos binarios resultantes también varían. Por ejemplo, un objeto serializado creado en Squeak Smalltalk no se puede restaurar en Ambrai Smalltalk . En consecuencia, varias aplicaciones que trabajan con múltiples implementaciones de Smalltalk y que dependen de la serialización de objetos no pueden compartir datos entre estas diferentes implementaciones. Estas aplicaciones incluyen la base de datos de objetos MinneStore [ 43 ] y algunos paquetes RPC . Una solución a este problema es SIXX [ 44 ] , un paquete para múltiples Smalltalk que utiliza un formato basado en XML para la serialización.readFrom:storeOn:readFrom:storeOn:/readFrom:SmartRefStreamImageSegments

Rápido

La biblioteca estándar de Swift proporciona dos protocolos, Encodabley Decodable(compuestos juntos como Codable), que permiten serializar o deserializar instancias de tipos conformes desde JSON , listas de propiedades u otros formatos. [ 45 ] El compilador puede generar implementaciones predeterminadas de estos protocolos para tipos cuyas propiedades almacenadas también son Decodableo Encodable.

PowerShell

PowerShell implementa la serialización a través del cmdlet integradoExport-CliXML . Export-CliXMLserializa objetos .NET y almacena el XML resultante en un archivo. Para reconstituir los objetos, utilice el Import-CliXMLcmdlet, que genera un objeto deserializado a partir del XML en el archivo exportado. Los objetos deserializados, a menudo conocidos como "bolsas de propiedades", no son objetos vivos; son instantáneas que tienen propiedades, pero no métodos. Las estructuras de datos bidimensionales también se pueden (des)serializar en formato CSV utilizando los cmdlets integrados Import-CSVy Export-CSV.

Véase también

Referencias

  1. Cline, Marshall. "Preguntas frecuentes sobre C++: ¿De qué se trata esto de la "serialización"?"Archivado del original el 5 de abril de 2015. Permite tomar un objeto o grupo de objetos, guardarlos en un disco o enviarlos mediante un mecanismo de transporte alámbrico o inalámbrico, y luego, quizás en otra computadora, revertir el proceso, recuperando el / los objeto(s) original(es). Los mecanismos básicos consisten en convertir el/los objeto(s) en una secuencia unidimensional de bits y transformar esa secuencia de bits de nuevo en el/los objeto(s) original(es).
  2. "Módulo: Marshal (Ruby 3.0.2)" . ruby-doc.org . Consultado el 25 de julio de 2021 .
  3. 1 2 "Marshal" . OCaml . Consultado el 25 de julio de 2021 .
  4. "Documentación de Python 3.9.6 - Serialización de objetos Python —pickle" . Documentación - La biblioteca estándar de Python .
  5. S. Miller, Mark. "Serialización segura bajo sospecha mutua" . ERights.org . La serialización, explicada a continuación, es un ejemplo de una herramienta que utilizan los objetos dentro de un sistema de objetos para operar en el grafo en el que están integrados. Esto parece requerir la violación de la encapsulación proporcionada por el modelo de objetos puro.
  6. Sun Microsystems (1987). "XDR: Estándar de representación de datos externos" . RFC 1014. Grupo de trabajo de redes . Consultado el 11 de julio de 2011 .
  7. "Serialización" . www.boost.org .
  8. beal, stephan. "s11n.net: serialización/persistencia de objetos en C++" . s11n.net .
  9. "Documentación de cereales - Principal" . uscilab.github.io .
  10. ^ Peter Dimov, Dan Katz, Brry Rezvin, Daveed Vandevoorde (19 de junio de 2025). "Empalmar un subobjeto de clase base" . isocpp.org . Grupo de Trabajo 21.{{cite web}}: CS1 maint: varios nombres: lista de autores ( enlace )
  11. "Codificación de paquetes" . pkg.go.dev . 12 de julio de 2021.
  12. "GitHub - Soporte YAML para el lenguaje Go" . GitHub . Consultado el 25 de julio de 2021 .
  13. "proto · pkg.go.dev" . pkg.go.dev . Consultado el 22-06-2021 .
  14. "paquete gob - codificación/gob - pkg.go.dev" . pkg.go.dev . Consultado el 04-03-2022 .
  15. "Texto.Mostrar documentación" . Consultado el 15 de enero de 2014 .
  16. Bloch, Joshua (2018). "Effective Java: Programming Language Guide" (tercera ed.). Addison-Wesley. ISBN  978-0134685991.
  17. "Pregúntale a TOM "Serializar objetos Java en la base de datos (y ge..."" . asktom.oracle.com .
  18. "JSON" . MDN Web Docs . Consultado el 22 de marzo de 2018 .
  19. "JSON" . www.json.org . Consultado el 22 de marzo de 2018 .
  20. Holm, Magnus (15 de mayo de 2011). "JSON: El subconjunto de JavaScript que no existe" . El repositorio atemporal. Archivado del original el 13 de mayo de 2012. Recuperado el 23 de septiembre de 2016 .
  21. "Propuesta TC39: Subsumir JSON" . Comité ECMA TC39. 22 de mayo de 2018.
  22. "Serialización" . El lenguaje Julia . Consultado el 25 de julio de 2021 .
  23. "Serialización más rápida y compacta de símbolos y cadenas · JuliaLang/julia@bb67ff2" . GitHub .
  24. "HDF5.jl: Guardar y cargar datos en el formato de archivo HDF5" . 20 de agosto de 2017 vía GitHub.
  25. "Julia: ¿Qué tan estables son serialize() / deserialize()?" . stackoverflow.com . 2014.
  26. "Serializadores .NET" . Archivado del original el 8 de mayo de 2015. Consultado el 21 de mayo de 2015. Existen muchos tipos de serializadores; producen datos muy compactos con gran rapidez. Hay serializadores para mensajería, para almacenamiento de datos y para serialización de objetos. ¿Cuál es el mejor serializador en .NET?
  27. "SERBENCH por aumcode" . aumcode.github.io .
  28. "PHP: Serialización de objetos - Manual" . ca.php.net .
  29. Esser, Stephen (28-11-2009). "Noticias impactantes sobre la explotación de PHP" . Suspekt... Archivado del original el 6-01-2012.
  30. "PHP: Serializable - Manual" . www.php.net .
  31. ""Lectura y escritura del trimestre"" . www.swi-prolog.org .
  32. ""write_term/ [ 2,3 ] "" . sicstus.sics.se .
  33. ""Entrada/salida de término"" . gprolog.org .
  34. Herlihy, Maurice ; Liskov, Barbara (octubre de 1982). "Un método de transmisión de valores para tipos de datos abstractos" ( PDF) . ACM Transactions on Programming Languages ​​and Systems . 4 (4): 527– 551. CiteSeerX 10.1.1.87.5301 . doi : 10.1145/69622.357182 . ISSN 0164-0925 . OCLC 67989840. S2CID 8126961 .    
  35. Birrell, Andrew; Jones, Mike; Wobber, Ted (noviembre de 1987). «Una implementación simple y eficiente de una base de datos pequeña». Actas del undécimo Simposio ACM sobre Principios de Sistemas Operativos - SOSP '87 . Vol. 11. págs. 149–154 . CiteSeerX 10.1.1.100.1457 . doi : 10.1145/41457.37517 . ISBN    089791242XISSN 0163-5980 . OCLC 476062921. S2CID 12908261. Nuestra implementación utiliza un mecanismo llamado "pickles " , que convierte entre cualquier estructura de datos fuertemente tipada y una representación de esa estructura adecuada para almacenar en archivos de disco permanentes. La operación Pickle.Write toma un puntero a una estructura de datos fuertemente tipada y entrega búferes de bits para escribir en el disco. Por el contrario, Pickle.Read lee búferes de bits del disco y entrega una copia de la estructura de datos original.(*) Esta conversión implica identificar las ocurrencias de direcciones en la estructura y disponer que cuando la estructura se lee de nuevo del disco, las direcciones se reemplazan con direcciones válidas en el entorno de ejecución actual. El mecanismo pickle es completamente automático: está impulsado por las estructuras de tipado en tiempo de ejecución que están presentes para nuestro mecanismo de recolección de basura. ... (*) El pickling es bastante similar al concepto de marshalling en llamadas a procedimientos remotos. En realidad, nuestra implementación de serialización funciona únicamente interpretando en tiempo de ejecución la estructura de valores con tipos dinámicos , mientras que nuestra implementación de RPC funciona únicamente generando código para la serialización de valores con tipos estáticos. Ambas funcionalidades se beneficiarían de la incorporación de los mecanismos de la otra, pero esto aún no se ha hecho.   
  36. van Rossum, Guido (1 de diciembre de 1994). "Aplanamiento de objetos Python" . Lenguaje de programación Python – Sitio web heredado . Delaware , Estados Unidos: Python Software Foundation . Recuperado el 6 de abril de 2017. Origen del nombre "aplanamiento": Como quiero dejar el módulo original "marshal" intacto, y Jim se quejó de que "serialización" también significa algo totalmente diferente que sí es relevante en el contexto del acceso concurrente a objetos persistentes, usaré el término "aplanamiento" de ahora en adelante. ... (El sistema Modula-3 usa el término datos "encurtidos" para este concepto. Probablemente ya hayan resuelto todos los problemas, y de una manera segura en cuanto a tipos :-) 
  37. 1 2 "11.1. pickle — Serialización de objetos Python — Documentación de Python 2.7.14rc1" . docs.python.org .
  38. "pickle — Serialización de objetos Python — Documentación de Python v3.0.1" . docs.python.org .
  39. "Novedades de Python 3.0 — Documentación de Python v3.1.5" . docs.python.org .
  40. [Manual de R http://stat.ethz.ch/R-manual/R-patched/library/base/html/dput.html ]
  41. [Manual de R http://stat.ethz.ch/R-manual/R-patched/library/base/html/serialize.html ]
  42. Eddelbuettel, Dirk; Stokely, Murray; Ooms, Jeroen (2014). "RProtoBuf: Serialización eficiente de datos entre lenguajes en R" . Journal of Statistical Software . 71 (2). arXiv : 1401.7372 . doi : 10.18637/jss.v071.i02 . S2CID 36239952 . 
  43. "MinneStore versión 2" . SourceForge . Archivado del original el 11 de mayo de 2008.
  44. "Novedades" . SIXX - Intercambio de instancias de Smalltalk en XML . 23 de enero de 2010. Consultado el 25 de julio de 2021 .
  45. "Archivo y serialización Swift" . www.github.com . 2 de diciembre de 2018.
  • Serialización 101
  • Documentación sobre serialización de objetos Java
  • Documentación sobre serialización de objetos en Java 1.4 .
  • Java duradero: Serialización. Archivado el 25 de noviembre de 2005 en Wayback Machine.
  • Recursos de enlace de datos XML
  • Databoard : serialización binaria con acceso parcial y aleatorio, sistema de tipos, RPC, adaptación de tipos y formato de texto.