stringtranslate.com

Publicación por entregas

En informática, la serialización (o serialización ) es el proceso de traducir una estructura de datos o el estado de un objeto a un formato que pueda almacenarse (por ejemplo, archivos en dispositivos de almacenamiento secundarios , buffers de datos en dispositivos de almacenamiento primarios) o transmitirse (por ejemplo, flujos de datos a través de redes informáticas ). ) y reconstruido posteriormente (posiblemente en un entorno informático diferente). [1] Cuando la serie de bits resultante se vuelve a leer de acuerdo con el formato de serialización, se puede usar 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 orientados a objetos no incluye ninguno de sus métodos asociados con los que estaban vinculados previamente.

Este proceso de serializar un objeto también se denomina ordenar un objeto 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 desclasificación ).

Usos

Los ejemplos de aplicaciones de serialización incluyen métodos como:

Para que algunas de estas características sean útiles, se debe mantener la independencia de la arquitectura. Por ejemplo, para un uso máximo de la distribución, una computadora que se ejecuta en una arquitectura de hardware diferente debería poder reconstruir de manera confiable un flujo de datos serializados, independientemente del endianismo . Esto significa que el procedimiento más simple y rápido de copiar directamente el diseño de la memoria de la estructura de datos no puede funcionar de manera confiable para todas las arquitecturas. Serializar la estructura de datos en un formato independiente de la arquitectura significa evitar problemas de ordenamiento de bytes , diseño de memoria o simplemente diferentes formas de representar estructuras de datos en diferentes lenguajes de programación .

Es inherente a cualquier esquema de serialización que, debido a que la codificación de los datos es, por definición, serial, extraer una parte de la estructura de datos serializados requiere que todo el objeto se lea de principio a fin y se reconstruya. En muchas aplicaciones, esta linealidad es una ventaja, porque permite utilizar interfaces de E/S simples y comunes para mantener y transmitir el estado de un objeto. En aplicaciones donde un mayor rendimiento es un problema, puede tener sentido dedicar más esfuerzo a lidiar con una organización de almacenamiento no lineal más compleja.

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

Dado que tanto la serialización como la deserialización pueden realizarse desde código común (por ejemplo, la función Serializar en Microsoft Foundation Classes ), es posible que el código común haga ambas cosas al mismo tiempo y, por lo tanto, 1) detecte diferencias entre los objetos que se están ejecutando. serializados y sus copias anteriores, y 2) proporcionar información para la siguiente detección. No es necesario construir la copia anterior porque las diferencias se pueden detectar sobre la marcha, una técnica llamada ejecución diferencial. Esto es útil en la programación de interfaces de usuario cuyos contenidos varían en el tiempo: se pueden crear, eliminar, alterar o hacer que los objetos gráficos manejen eventos de entrada sin tener que escribir necesariamente un código separado para hacer esas cosas.

Desventajas

La serialización rompe la opacidad de un tipo de datos 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 los competidores de fabricar productos compatibles, los editores de software propietario suelen mantener en secreto comercial los detalles de los formatos de serialización de sus programas . Algunos ofuscan deliberadamente o incluso cifran los datos serializados. Sin embargo, la interoperabilidad requiere que las aplicaciones puedan comprender los formatos de serialización de cada una. Por lo tanto, las arquitecturas de llamada a métodos remotos como CORBA definen sus formatos de serialización en detalle.

Muchas instituciones, como archivos y bibliotecas, intentan preparar sus archivos de respaldo para el futuro (en particular, volcados de bases de datos ) almacenándolos en algún formato serializado relativamente legible por humanos .

Formatos de serialización

La tecnología Xerox Network Systems Courier de 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).

A finales de la década de 1990, comenzó una iniciativa para proporcionar una alternativa a los protocolos de serialización estándar: se utilizó XML , un subconjunto SGML , para producir una codificación basada en texto legible por humanos . Esta codificación puede resultar ú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 en este punto las mayores capacidades de almacenamiento y transmisión hicieron que el tamaño del archivo fuera una preocupación menor que en los primeros días de la informática. En la década de 2000, XML se utilizaba a menudo para la transferencia asincrónica de datos estructurados entre el cliente y el 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 también se utiliza habitualmente para la comunicación cliente-servidor en aplicaciones web. JSON se basa en la sintaxis de JavaScript , pero es independiente de JavaScript y es compatible con muchos otros lenguajes de programación. JSON es un formato abierto, 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 sangrías y múltiples formas de citación de datos escalares. YAML es un formato abierto.

Las listas de propiedades se utilizan para la serialización mediante los marcos NeXTSTEP , GNUstep , macOS e iOS . La lista de propiedades , o p-list para abreviar, 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 o oceánicos, se han desarrollado estándares de serialización binaria específicos, por ejemplo, HDF , netCDF y el antiguo GRIB .

Soporte de lenguaje de programación

Varios lenguajes de programación orientados a objetos admiten directamente la serialización de objetos (o el archivo de objetos ), ya sea mediante elementos sintácticos de azúcar o proporcionando una interfaz estándar para hacerlo. Los lenguajes que lo hacen incluyen Ruby , Smalltalk , Python , PHP , Objective-C , Delphi , Java y la familia de lenguajes .NET . También hay bibliotecas disponibles que agregan soporte de serialización a idiomas que carecen de soporte nativo.

C y C++

C y C++ no proporcionan serialización como ningún tipo de construcción de alto nivel, pero ambos lenguajes admiten la escritura de cualquiera de los tipos de datos integrados , así como estructuras de datos antiguas y simples , como datos binarios. Como tal, suele ser trivial escribir funciones de serialización personalizadas. Además, las soluciones basadas en compiladores, como el sistema ODB ORM 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 clases. Otros marcos de serialización populares son Boost.Serialization [7] de Boost Framework , el marco S11n, [8] y Cereal. [9] El marco MFC (Microsoft) también proporciona una metodología de serialización como parte de su arquitectura Document-View.

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 incorporado 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 clasificación/desclasificación de datos JSON y XML . [10] También hay módulos de terceros que admiten YAML [11] y Protocol Buffers . [12] Go también admite Gobs . [13]

Haskell

En Haskell, la serialización es compatible con tipos que son miembros de las clases de tipos Leer y Mostrar . Cada tipo que es miembro de la Readclase de tipo define una función que extraerá los datos de la representación de cadena de los datos volcados. La Showclase de tipo, 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 declarar un tipo para derivar Leer o derivar Mostrar, o ambos, puede hacer que el compilador genere las funciones apropiadas para muchos casos (pero no para todos: los tipos de funciones, por ejemplo, no pueden derivar automáticamente Mostrar). o Leer). La instancia generada automáticamente 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. [14] Para una serialización más eficiente, existen bibliotecas Haskell que permiten la serialización de alta velocidad en formato binario, por ejemplo, binario.

Java

Java proporciona serialización automática que requiere que el objeto esté marcado implementando la java.io.Serializable interfaz . La implementación de la interfaz marca la clase como "aceptable para serializar" y luego Java maneja la serialización internamente. No hay métodos de serialización definidos en la Serializableinterfaz, pero una clase serializable puede definir opcionalmente métodos con ciertos nombres y firmas especiales que, si se definen, se llamarán como parte del proceso de serialización/deserialización. El lenguaje también permite al desarrollador anular el proceso de serialización más completamente implementando otra interfaz, la Externalizableinterfaz, que incluye dos métodos especiales que se utilizan para guardar y restaurar el estado del objeto.
Hay tres razones principales por las que los objetos no son serializables de forma predeterminada y deben implementar la Serializableinterfaz para acceder al mecanismo de serialización de Java.
En primer lugar, no todos los objetos capturan semántica útil en un estado serializado. Por ejemplo, un Threadobjeto está vinculado al estado de la JVM actual . No existe ningún contexto en el que un Threadobjeto deserializado mantenga una semántica útil.
En segundo lugar, el estado serializado de un objeto forma parte del contrato de compatibilidad de su clase. Mantener la compatibilidad entre versiones de clases serializables requiere esfuerzo y consideración adicionales. Por lo tanto, hacer que una clase sea serializable debe ser una decisión de diseño deliberada y no una condición predeterminada.
Por último, la serialización permite el acceso a miembros privados no transitorios de una clase a los que de otro modo no se podría acceder. Las clases que contienen información confidencial (por ejemplo, una contraseña) no deben ser serializables ni externalizables. [15] : 339–345  El método de codificación estándar utiliza una traducción recursiva basada en gráficos del descriptor de clase del objeto y los campos serializables en un flujo de bytes. Los primitivos , así como los objetos referenciados no transitorios y no estáticos, se codifican en la secuencia. Cada objeto al que hace referencia el objeto serializado a través de un campo que no está marcado como transienttambién debe ser serializado; y si algún objeto en el gráfico completo de referencias de objetos no transitorios no es serializable, entonces la serialización fallará. El desarrollador puede influir en este comportamiento marcando objetos como transitorios o redefiniendo la serialización de un objeto para que una parte del gráfico de referencia se trunque y no se serialice.
Java no utiliza constructor para serializar objetos. Es posible serializar objetos Java a través de JDBC y almacenarlos en una base de datos. [16] Mientras se balanceaLos componentes implementan la interfaz serializable, no se garantiza que sean portátiles entre diferentes versiones de la máquina virtual Java. Como tal, un componente Swing, o cualquier componente que lo herede, puede serializarse en un flujo de bytes, pero no se garantiza que se pueda reconstituir en otra máquina.

javascript

Desde ECMAScript 5.1, [17] 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, [18] 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 entrecomilladas, mientras que ECMAScript 2018 y versiones anteriores no lo hacen. [19] [20] Consulte el artículo principal sobre JSON .

Julia

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

Ceceo

Generalmente una estructura de datos Lisp se puede serializar con las funciones " read" y " print". Una variable foo que contenga, por ejemplo, una lista de matrices, se imprimiría mediante (print foo). De manera similar, un objeto se puede leer desde una secuencia denominada s mediante (read s). Estas dos partes de la implementación de Lisp se denominan Impresora y Lector. La salida de " print" es legible por 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 cambio, 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 usan 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 la memoria como una estructura de datos, transformarse mediante otro programa y luego posiblemente ejecutarse o escribirse, como en un bucle de lectura, evaluación e impresión . No todos los lectores/escritores admiten estructuras cíclicas, recursivas o compartidas.(4 2.9 "x" y)print-object

.NET Framework

.NET Framework tiene varios serializadores diseñados por Microsoft . También hay muchos serializadores de terceros. Aquí se analizan y prueban más de una docena de serializadores. [25] y aquí [26]

OCaml

La biblioteca estándar de OCamlMarshal proporciona clasificación a través del módulo [3] y las funciones Pervasives output_valuey input_value. Si bien la programación OCaml se verifica estáticamente, los usos del Marshalmódulo pueden romper las garantías de tipo, ya que no hay forma de verificar si una secuencia no ordenada representa objetos del tipo esperado. En OCaml es difícil ordenar 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 funciones no se puede transmitir entre diferentes programas. (Hay una bandera para ordenar la posición del código de una función, pero solo se puede desarmar exactamente en el mismo programa). Las funciones de clasificación estándar pueden conservar el intercambio y manejar datos cíclicos, que se pueden configurar mediante una bandera.

perla

Varios módulos Perl disponibles en CPAN proporcionan mecanismos de serialización, incluidos Storable, JSON::XSy FreezeThaw. Almacenable incluye funciones para serializar y deserializar estructuras de datos de Perl hacia y desde archivos o escalares de Perl. Además de serializar directamente en archivos, Storableincluye la freezefunción para devolver una copia serializada de los datos empaquetados en un escalar y thawdeserializar 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, existen funciones seguras de red que siempre almacenan sus datos en un formato legible en cualquier computadora a un pequeño costo de velocidad. Estas funciones se denominan nstore, nfreeze, etc. No hay funciones "n" para deserializar estas estructuras: las estructuras regular thawy retrievedeserializar se serializan con las nfunciones " " y sus equivalentes específicos de la máquina.

PHP

PHP implementó originalmente la serialización a través de funciones integradas serialize()y unserialize(). [27] PHP puede serializar cualquiera de sus tipos de datos excepto recursos (punteros de archivos, sockets, etc.). La función incorporada unserialize()suele ser peligrosa cuando se utiliza con datos que no son de confianza. [28] 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 serialize()y unserialize(), respectivamente, que pueden limpiar y restaurar un objeto. Por ejemplo, puede ser conveniente cerrar una conexión de base de datos durante la serialización y restaurar la conexión durante la deserialización; 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. [29]

Prólogo

La estructura de términos de Prolog , que es la única estructura de datos del lenguaje, se puede serializar a través del predicado incorporado write_term/3y serializar a través de los predicados incorporados read/1y read_term/2. La secuencia resultante es texto sin comprimir (en alguna codificación determinada por la configuración de la secuencia 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. ("Escribir un término, § 7.10.5"). Por lo tanto, se espera que los términos serializados por una implementación puedan ser serializados 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 utilizar estructuras de términos no estándar, por lo que la interoperabilidad puede romperse en casos extremos. Como ejemplos, consulte las páginas del manual correspondientes para SWI-Prolog, [30] SICStus Prolog, [31] GNU Prolog. [32] Se deja en manos del implementador si y cómo se verifican los términos serializados recibidos a través de la red con una especificación (después de que se haya producido la deserialización del flujo de caracteres). Las gramáticas de cláusulas definidas integradas en Prolog se pueden aplicar en esa etapa.

Pitón

El mecanismo central de serialización general es el módulo pickle de biblioteca estándar , en alusión al término decapado de los sistemas de bases de datos [33] [ 34] [35] para describir la serialización de datos ( deserialización ) . Pickle utiliza una máquina virtual basada en pila simple que registra las instrucciones utilizadas para reconstruir el objeto. Es un formato de serialización personalizable entre versiones pero inseguro (no seguro contra datos erróneos o maliciosos). Los datos mal formados o construidos maliciosamente pueden hacer que el deserializador importe módulos arbitrarios y cree instancias de cualquier objeto. [36] [37] La ​​biblioteca estándar también incluye módulos que se serializan en formatos de datos estándar: (con soporte integrado para tipos escalares y de colección básicos y capaz de admitir tipos arbitrarios mediante enlaces de codificación y decodificación). (con soporte para formatos de lista de propiedades binarios y XML ). (con soporte para el estándar de representación de datos externos (XDR) como se describe en RFC 1014). Finalmente, se recomienda que un objeto sea evaluable en el entorno correcto, lo que lo convierte en una coincidencia aproximada para Common Lisp . No todos los tipos de objetos se pueden seleccionar automáticamente, especialmente aquellos que contienen recursos del sistema operativo como identificadores de archivos , pero los usuarios pueden registrar funciones personalizadas de "reducción" y construcción para admitir la selección y deshacer de tipos arbitrarios. Pickle se implementó originalmente como un módulo de Python puro, pero, en versiones de Python anteriores a la 3.0, el módulo (también integrado) ofrece un rendimiento mejorado (hasta 1000 veces más rápido [36] ). Fue adaptado del proyecto Unladen Swallow . En Python 3, los usuarios siempre deben importar la versión estándar, que intenta importar la versión acelerada y recurre a la versión pura de Python. [38]jsonplistlibxdrlib__repr__print-objectpicklecPicklecPickle

R

R tiene la función dputque escribe una representación de texto ASCII de un objeto R en un archivo o conexión. Se puede leer una representación de un archivo usando dget. [39] Más específicamente, la función serializeserializa un objeto R a una conexión, siendo la salida un vector sin formato codificado en formato hexadecimal. La unserializefunción permite leer un objeto desde una conexión o un vector sin formato. [40]

REBOL

REBOL se serializará en un archivo ( save/all) o en un string!( mold/all). Las cadenas y archivos se pueden deserializar utilizando la función polimórfica load . RProtoBufproporciona serialización de datos en varios idiomas en R, utilizando Protocol Buffers . [41]

Rubí

Ruby incluye el módulo estándar Marshalcon 2 métodos dumpy load, similar a las utilidades estándar de Unix dumpy restore. Estos métodos se serializan en la clase estándar String, es decir, se convierten efectivamente en una secuencia de bytes. Algunos objetos no se pueden serializar (al hacerlo, se generaría una TypeErrorexcepción): enlaces, objetos de procedimiento, instancias de clase IO, objetos singleton e interfaces. Si una clase requiere una serialización personalizada (por ejemplo, requiere ciertas acciones de limpieza realizadas al volcar/restaurar), se puede hacer implementando 2 métodos: _dumpy _load. El método de instancia _dump debe devolver un Stringobjeto que contenga toda la información necesaria para reconstituir los objetos de esta clase y todos los objetos referenciados hasta una profundidad máxima dada como un parámetro entero (un valor de -1 implica que la verificación de profundidad debe estar deshabilitada). El método de clase _load debe tomar Stringy devolver un objeto de esta clase.

Óxido

Serdees la biblioteca o caja más utilizada para la serialización en Rust .

Charla

En general, los objetos no recursivos y que no se comparten se pueden almacenar y recuperar en un formato legible por humanos mediante el protocolo storeOn:/ readFrom:. El storeOn:método genera el texto de una expresión de Smalltalk que, cuando se evalúa usando readFrom:, recrea el objeto original. Este esquema es especial porque utiliza una descripción procedimental del objeto, no los datos en sí. Por lo tanto, es muy flexible y permite que las clases definan representaciones más compactas. Sin embargo, en su forma original, no maneja estructuras de datos cíclicas ni preserva la identidad de referencias compartidas (es decir, dos referencias de un único objeto se restaurarán como referencias a dos copias iguales, pero no idénticas). Para ello existen diversas alternativas portátiles y no portátiles. Algunos de ellos son específicos de una implementación o biblioteca de clases de Smalltalk en particular. Hay varias formas en Squeak Smalltalk de serializar y almacenar objetos. Los más sencillos y utilizados son storeOn:/readFrom:los formatos de almacenamiento binario basados ​​en SmartRefStreamserializadores. Además, los objetos empaquetados se pueden almacenar y recuperar usando ImageSegments. Ambos proporcionan el llamado "marco de almacenamiento de objetos binarios", que admite la serialización y la recuperación desde un formato binario compacto. Ambos manejan estructuras cíclicas, recursivas y compartidas, almacenamiento/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 que fueron escritas por una versión anterior de una clase con un diseño de objeto 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 se puede cargar en otros Smalltalks 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 funcionan en múltiples implementaciones de Smalltalk 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 [42] y algunos paquetes RPC . Una solución a este problema es SIXX, [43] que es un paquete para múltiples Smalltalks que utiliza un formato basado en XML para la serialización.

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. [44] El compilador puede generar implementaciones predeterminadas de estos protocolos para tipos cuyas propiedades almacenadas también son Decodableo Encodable.

WindowsPowerShell

Windows 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 del 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.

Ver también

Referencias

  1. ^ Cline, Marshall. "Preguntas frecuentes sobre C++:" ¿De qué se trata todo esto de la "serialización"? Archivado desde el original el 5 de abril de 2015. Le permite tomar un objeto o grupo de objetos, ponerlos en un disco o enviarlos a través de un mecanismo de transporte inalámbrico o por cable, y luego, tal vez en otra computadora, revertir el proceso, resucitando los objetos originales. Los mecanismos básicos son aplanar los objetos en un flujo unidimensional de bits y convertir ese flujo de bits nuevamente en los objetos originales.
  2. ^ "Módulo: Mariscal (Ruby 3.0.2)". ruby-doc.org . Consultado el 25 de julio de 2021 .
  3. ^ ab "Mariscal". OCaml . Consultado el 25 de julio de 2021 .
  4. ^ "Documentación de Python 3.9.6: serialización de objetos de Python: pickle". Documentación: la biblioteca estándar de Python .
  5. ^ S. Miller, Marcos. "Serialización segura bajo sospecha mutua". ERights.org . La serialización, que se explica a continuación, es un ejemplo de una herramienta para que la utilicen objetos dentro de un sistema de objetos para operar en el gráfico en el que están incrustados. Esto parece requerir violar la encapsulación proporcionada por el modelo de objetos puro.
  6. ^ Microsistemas solares (1987). "XDR: estándar de representación de datos externos". RFC 1014 . Grupo de Trabajo de Red . 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. ^ "Documentos de cereales - Principal". uscilab.github.io .
  10. ^ "Codificación de paquetes". pkg.go.dev . 12 de julio de 2021.
  11. ^ "GitHub: compatibilidad con YAML para el lenguaje Go". GitHub . Consultado el 25 de julio de 2021 .
  12. ^ "proto·pkg.go.dev". pkg.go.dev . Consultado el 22 de junio de 2021 .
  13. ^ "paquete gob - codificación/gob - pkg.go.dev". pkg.go.dev . Consultado el 4 de marzo de 2022 .
  14. ^ "Texto.Mostrar documentación" . Consultado el 15 de enero de 2014 .
  15. ^ Bloch, Josué (2018). "Java efectivo: Guía del lenguaje de programación" (tercera ed.). Addison-Wesley. ISBN 978-0134685991.
  16. ^ "Pregúntele a TOM" Serializar objetos Java en la base de datos (y obtener ..."". Asktom.oracle.com .
  17. ^ "JSON". Documentos web de MDN . Consultado el 22 de marzo de 2018 .
  18. ^ "JSON". www.json.org . Consultado el 22 de marzo de 2018 .
  19. ^ Holm, Magnus (15 de mayo de 2011). "JSON: el subconjunto de JavaScript que no lo es". El repositorio atemporal . Consultado el 23 de septiembre de 2016 .
  20. ^ "Propuesta TC39: Subsumir JSON". Comité ECMA TC39. 22 de mayo de 2018.
  21. ^ "Serialización". La lengua de Julia . Consultado el 25 de julio de 2021 .
  22. ^ "Serialización de símbolos y cadenas más rápida y compacta · JuliaLang/julia@bb67ff2". GitHub .
  23. ^ "HDF5.jl: guardar y cargar datos en formato de archivo HDF5". 20 de agosto de 2017 - vía GitHub.
  24. ^ "Julia: qué tan estables son serialize()/deserialize()". stackoverflow.com . 2014.
  25. ^ "Serializadores .NET". Existen muchos tipos de serializadores; Producen datos muy compactos muy rápidamente. Hay serializadores para mensajería, almacenes de datos y clasificación de objetos. ¿Cuál es el mejor serializador en .NET?
  26. ^ "SERBENCH por aumcode". aumcode.github.io .
  27. ^ "PHP: Serialización de objetos - Manual". ca.php.net .
  28. ^ Esser, Stephen (28 de noviembre de 2009). "Noticias impactantes sobre la explotación de PHP". Sospechoso ... Archivado desde el original el 6 de enero de 2012.
  29. ^ "PHP: Serializable - Manual". www.php.net .
  30. ^ ""Lectura y escritura de términos"". www.swi-prolog.org .
  31. ^ ""write_term/[2,3]"". sicstus.sics.se .
  32. ^ ""Término de entrada/salida"". gprolog.org .
  33. ^ Herlihy, Mauricio ; Liskov, Barbara (octubre de 1982). "Un método de transmisión de valor para tipos de datos abstractos" (PDF) . Transacciones ACM sobre lenguajes y sistemas de programación . 4 (4): 527–551. CiteSeerX 10.1.1.87.5301 . doi : 10.1145/69622.357182. ISSN  0164-0925. OCLC  67989840. S2CID  8126961. 
  34. ^ Birrell, Andrés; Jones, Mike; Wobber, Ted (noviembre de 1987). "Una implementación simple y eficiente de una pequeña base de datos". 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  089791242X. ISSN  0163-5980. OCLC  476062921. S2CID  12908261. Nuestra implementación utiliza un mecanismo llamado "pickles", que convertirá 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 buffers de bits para escribir en el disco. Por el contrario, Pickle.Read lee buffers de bits del disco y entrega una copia de la estructura de datos original.(*) Esta conversión implica identificar las apariciones de direcciones en la estructura y disponer que cuando la estructura se lea desde el disco, las direcciones sean reemplazado con direcciones válidas en el entorno de ejecución actual. El mecanismo de recolección es completamente automático: está impulsado por las estructuras de escritura en tiempo de ejecución que están presentes para nuestro mecanismo de recolección de basura. ... (*) Pickling es bastante similar al concepto de marshalling en llamadas a procedimientos remotos. Pero, de hecho, nuestra implementación de decapado funciona únicamente interpretando en tiempo de ejecución la estructura de valores tipificados dinámicamente , mientras que nuestra implementación RPC funciona únicamente generando código para ordenar valores tipificados estáticamente. Cada instalación se beneficiaría añadiendo los mecanismos de la otra, pero eso aún no se ha hecho.
  35. ^ 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 . Consultado el 6 de abril de 2017 . Origen del nombre 'aplanamiento': como quiero dejar el módulo 'marshal' original en paz y Jim se quejó de que 'serialización' también significa algo totalmente diferente que es realmente relevante en el contexto del acceso simultáneo a objetos persistentes, usaré de ahora en adelante el término "aplanamiento". ... (El sistema Modula-3 utiliza el término datos 'encurtidos' para este concepto. Probablemente ya hayan resuelto todos los problemas y de forma segura :-)
  36. ^ ab "11.1. pickle - Serialización de objetos Python - Documentación de Python 2.7.14rc1". docs.python.org .
  37. ^ "pickle - Serialización de objetos Python - Documentación de Python v3.0.1". docs.python.org .
  38. ^ "Novedades de Python 3.0: documentación de Python v3.1.5". docs.python.org .
  39. ^ [Manual de R http://stat.ethz.ch/R-manual/R-patched/library/base/html/dput.html]
  40. ^ [Manual de R http://stat.ethz.ch/R-manual/R-patched/library/base/html/serialize.html]
  41. ^ Eddelbuettel, Dirk; Stokely, Murray; Ooms, Jeroen (2014). "RProtoBuf: serialización eficiente de datos en varios idiomas en R". Revista de software estadístico . 71 (2). arXiv : 1401.7372 . doi : 10.18637/jss.v071.i02. S2CID  36239952.
  42. ^ "MinneStore versión 2". FuenteForge . Archivado desde el original el 11 de mayo de 2008.
  43. ^ "Qué hay de nuevo". SIXX: intercambio de instancias de Smalltalk en XML . 23 de enero de 2010 . Consultado el 25 de julio de 2021 .
  44. ^ "Archivado y serialización rápidos". www.github.com . 2018-12-02.

enlaces externos