De Wikipedia, la enciclopedia libre
Saltar a navegación Saltar a búsqueda

En informática, la serialización (ortografía de EE. UU.) O la serialización (ortografía del Reino Unido) es el proceso de traducir una estructura de datos o el estado de un objeto a un formato que se puede almacenar (por ejemplo, en un archivo o en un búfer de datos de memoria ) o transmitir (por ejemplo, a través de una red informática ) y reconstruido más tarde (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 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 orientados a objetos no incluye ninguno de sus métodos asociados con los que estaban vinculados anteriormente.

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

Usos [ editar ]

Métodos de:

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 ejecute en una arquitectura de hardware diferente debería poder reconstruir de manera confiable un flujo de datos serializados, independientemente del endianness . Esto significa que el procedimiento más simple y rápido de copiar directamente el diseño de 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 los problemas de ordenamiento de bytes , diseño de memoria o simplemente diferentes formas de representar estructuras de datos en diferentes lenguajes de programación .

Inherente a cualquier esquema de serialización es que, debido a que la codificación de los datos es serial por definición, extraer una parte de la estructura de datos serializados requiere que todo el objeto sea leído de principio a fin y reconstruido. En muchas aplicaciones, esta linealidad es una ventaja, ya que permite utilizar interfaces de E / S comunes y simples para retener 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 guardar porque los objetos a los que apuntan pueden volver a cargarse en una ubicación diferente en la memoria. Para hacer frente a esto, el proceso de serialización incluye un paso llamado desenrollar o desenchufar el 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 puntero swizzling .

Dado que tanto la serialización como la deserialización se pueden controlar 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 serializados y sus copias anteriores, y 2) proporcionar la entrada para la siguiente detección de este tipo. No es necesario crear la copia anterior porque las diferencias se pueden detectar sobre la marcha. La técnica se llama ejecución diferencial . Esto es útil en la programación de interfaces de usuario cuyo contenido varía en el tiempo: los objetos gráficos se pueden crear, eliminar, alterar o hacer para manejar eventos de entrada sin tener que escribir un código separado para hacer esas cosas.

Inconvenientes [ editar ]

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 a menudo mantienen en secreto comercial los detalles de los formatos de serialización de sus programas . Algunos ocultan deliberadamente o incluso cifran los datos serializados. Sin embargo, la interoperabilidad requiere 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 en detalle.

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

Formatos de serialización [ editar ]

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 ).

A fines de la década de 1990, comenzó un impulso para proporcionar una alternativa a los protocolos de serialización estándar: XML , un subconjunto SGML , se utilizó para producir una codificación basada en texto legible por humanos . Tal 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 en este punto, las mayores capacidades de almacenamiento y transmisión hicieron que el tamaño del archivo fuera menos preocupante que en los primeros días de la informática. En la década de 2000, XML se usaba a menudo para la transferencia asincrónica de datos estructurados entre cliente y servidor en aplicaciones web Ajax . XML es un formato abierto y estandarizado comoRecomendación del W3C .

JSON , es una alternativa de texto plano más ligera a XML que también 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 también es compatible con 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 JSON estricto e incluye características adicionales como una noción de tipos de datos de etiquetado, soporte para estructuras de datos no jerárquicas, la opción de estructurar datos con sangría 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 marcos de trabajo NeXTSTEP , GNUstep , macOS e iOS . Property list , o p-list para abreviar, no se refiere a un solo 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 de satélite y salida 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 .

Soporte de lenguaje de programación [ editar ]

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 lenguajes 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 simples , como datos binarios. Como tal, generalmente es 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 a las declaraciones de clase. Otros marcos de serialización populares son Boost.Serialization [7] de Boost Framework , el marco S11n, [8] y cereales. [9] El marco MFC (Microsoft) también proporciona una metodología de serialización como parte de su arquitectura Document-View.
CFML
CFML permite que las estructuras de datos se serialicen en WDDX con la <cfwddx>etiqueta y en JSON con la función SerializeJSON () .
Delphi
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 vuelve a cargar sobre la marcha.
Vamos
Go admite de forma nativa la clasificación / clasificación de datos JSON y XML . [10] También hay módulos de terceros que admiten YAML . [11]
Haskell
En Haskell, la serialización es compatible con los 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 elshowfunció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 que un tipo deriva Read o Derivar 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 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 Haskell ejecutando el código producido por show en, por ejemplo, un intérprete Haskell. [12] 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 se marque mediante la implementación de la java.io.Serializable interfaz . La implementación de la interfaz marca la clase como "aceptable para serializar", y Java luego maneja la serialización internamente. No hay métodos de serialización definidos en la Serializableinterfaz, pero una clase serializable puede opcionalmente definir métodos con ciertos nombres y firmas especiales que, si se definen, serán llamados como parte del proceso de serialización / deserialización. El lenguaje también permite al desarrollador anular el proceso de serialización más a fondo implementando otra interfaz, laExternalizableinterfaz, 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 se pueden serializar 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ánticas útiles en un estado serializado. Por ejemplo, un Threadobjeto está vinculado al estado de la JVM actual . No existe un contexto en el que un deserializadoThreadel objeto mantendría una semántica útil. En segundo lugar, el estado serializado de un objeto forma parte del contrato de compatibilidad de sus clases. Mantener la compatibilidad entre versiones de clases serializables requiere un 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 no transitoriosmiembros privados de una clase que no son accesibles de otra manera. Las clases que contienen información confidencial (por ejemplo, una contraseña) no deben ser serializables ni externalizables. 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 objetos primitivos, así como los objetos referenciados no estáticos y no transitorios, se codifican en la secuencia. Cada objeto al que hace referencia el objeto serializado a través de un campo que no está marcado comotransienttambién debe ser serializado; y si algún objeto en el gráfico completo de referencias de objetos no transitorios no es serializable, 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 usa el constructor para serializar objetos. Es posible serializar objetos Java a través de JDBC y almacenarlos en una base de datos. [13] 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, se puede serializar en un flujo de bytes, pero no se garantiza que este sea reconstituible en otra máquina.
JavaScript
Desde ECMAScript 5.1, [14] JavaScript ha incluido el JSONobjeto integrado y sus métodos JSON.parse()y JSON.stringify(). Aunque JSON se basa originalmente en un subconjunto de JavaScript, [15] 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. [16] [17] Consulte el artículo principal sobre JSON .
Julia
Julia implementa la serialización a través de los módulos serialize()/ deserialize(), [18] destinados a trabajar dentro de la misma versión de Julia, y / o instancia de la misma imagen del sistema. [19] El HDF5.jlpaquete ofrece una alternativa más estable, utilizando un formato documentado y una biblioteca común con envoltorios para diferentes idiomas, [20] mientras que se sugiere que el formato de serialización predeterminado se diseñó teniendo en cuenta el máximo rendimiento para la comunicación de red. [21]
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á mediante (print foo). De manera similar, un objeto puede leerse de una secuencia denominada s por (read s). Estas dos partes de la implementación Lisp se denominan Impresora y Lector. La salida de " print" es legible por humanos; que utiliza listas delimitadas por paréntesis, por ejemplo: (4 2.9 "x" y). 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éricaprint-object, esto 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 distintos y separados para manejar código y datos, Lisp solo usa uno. Un archivo que contiene código lisp puede leerse en la memoria como una estructura de datos, transformarse por otro programa y luego posiblemente ejecutarse o escribirse, como en un ciclo de lectura-evaluación-impresión . No todos los lectores / escritores admiten estructuras cíclicas, recursivas o compartidas.
.NET Framework
.NET Framework tiene varios serializadores diseñados por Microsoft . También hay muchos serializadores de terceros. Más de una docena de serializadores se discuten y se prueban aquí . [22] y aquí [23] La lista crece constantemente.
OCaml
La biblioteca estándar de OCaml proporciona la clasificación a través del Marshalmódulo ( su documentación ) y las funciones de Pervasives output_valuey input_value. Si bien la programación OCaml se verifica de forma estática, los usos de laMarshalEl módulo puede 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 a través de diferentes programas. (Hay una bandera para ordenar la posición del código de una función, pero solo se puede deshacer exactamente en el mismo programa). Las funciones de clasificación estándar pueden preservar el uso compartido y el manejo de datos cíclicos, que se pueden configurar mediante una bandera.
Perl
Varios módulos de Perl disponibles en CPAN proporcionan mecanismos de serialización, incluidos Storable, JSON::XSy FreezeThaw. Storable incluye funciones para serializar y deserializar estructuras de datos Perl hacia y desde archivos o escalares 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 que es legible en cualquier computadora a un pequeño costo de velocidad. Estas funciones se nombran nstore,nfreeze, etc. No hay funciones "n" para deserializar estas estructuras - las estructuras regular thawy retrievedeserializar 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()y unserialize(). [24] PHP puede serializar cualquiera de sus tipos de datos excepto los recursos (punteros de archivo, sockets, etc.). La unserialize()función incorporada a menudo es peligrosa cuando se usa con datos que no son de confianza. [25] 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()yunserialize(), respectivamente, que pueden limpiar y restaurar un objeto. Por ejemplo, puede ser conveniente cerrar una conexión de base de datos en la serialización y restaurar la conexión en 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. [26]
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 integrado write_term/3y serializar a través de los predicados integrados 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 variable 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 usar estructuras de términos no estándar, por lo que la interoperabilidad puede romperse en casos extremos. Como ejemplos, consulte las páginas de manual correspondientes para SWI-Prolog, [27] SICStus Prolog, [28] GNU Prolog. [29] El implementador decide si los términos serializados recibidos a través de la red y cómo se comparan 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 de Prolog se pueden aplicar en esa etapa.
Pitón
El mecanismo de serialización general principal es el módulo de pickle biblioteca estándar , en alusión al término decapado [30] [31] [32] de los sistemas de bases de datos para describir la serialización de datos ( deshabilitación para deserialización ). Pickle utiliza una máquina virtual simple basada en pilas que registra las instrucciones utilizadas para reconstruir el objeto. Es un formato de serialización de versiones cruzadas personalizable 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 una instancia de cualquier objeto. [33] [34]La biblioteca estándar también incluye módulos que serializan a formatos de datos estándar: json(con soporte incorporado para tipos de colección y escalares básicos y capaz de admitir tipos arbitrarios mediante ganchos de codificación y decodificación ). plistlib(con soporte para formatos de lista de propiedades binarios y XML ). xdrlib(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 __repr__sea ​​evaluable en el entorno adecuado, lo que lo convierte en una coincidencia aproximada para Common Lisp print-object. No todos los tipos de objetos se pueden eliminar automáticamente, especialmente los 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 el decapado y despegado de tipos arbitrarios. Pickle se implementó originalmente como el picklemódulo Python puro , pero, en las versiones de Python anteriores a la 3.0, el cPicklemódulo (también integrado) ofrece un rendimiento mejorado (hasta 1000 veces más rápido [33] ). El cPicklefue 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. [35]
R
R tiene la función dputque escribe una representación de texto ASCII de un objeto R en un archivo o conexión. Una representación se puede leer de un archivo usando dget. [36] Más específico, 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. [37]
REBOL
REBOL se serializará en el archivo ( save/all) o en un string!( mold/all). Las cadenas y los archivos se pueden deserializar mediante la función polimórfica load . RProtoBufproporciona serialización de datos en varios idiomas en R, utilizando Protocol Buffers . [38]
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 (hacerlo 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 que se realicen ciertas acciones de limpieza en el volcado / restauración), se puede realizar implementando 2 métodos: _dumpy _load. El método de instancia _dumpdebe devolver unStringobjeto que contiene 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 _loaddebe tomar ay Stringdevolver un objeto de esta clase.
Charla
En general, los objetos no recursivos y no compartidos se pueden almacenar y recuperar en una forma legible por humanos utilizando el protocolo storeOn:/ readFrom:. El storeOn:método genera el texto de una expresión de Smalltalk que, cuando se evalúa utilizandoreadFrom:- recrea el objeto original. Este esquema es especial, ya que utiliza una descripción de procedimiento del objeto, no los datos en sí. Por tanto, es muy flexible, lo que 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 las referencias compartidas (es decir, dos referencias de un solo 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 de Smalltalk o biblioteca de clases en particular. Hay varias formas en Squeak Smalltalk de serializar y almacenar objetos. Los storeOn:/readFrom:formatos de almacenamiento binarios más fáciles y usados ​​son y basados ​​enSmartRefStreamserializadores. Además, los objetos empaquetados se pueden almacenar y recuperar utilizandoImageSegments. Ambos proporcionan el denominado "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 clase y metaclase 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 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 enAmbrai 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 [1] y algunos paquetes RPC . Una solución a este problema es SIXX [2] , que es un paquete para múltiples Smalltalks que usa 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 a JSON , listas de propiedades u otros formatos. [39] El compilador puede generar implementaciones predeterminadas de estos protocolos para tipos cuyas propiedades almacenadas también son Decodableo Encodable.
Windows PowerShell
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, use 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.

Ver también [ editar ]

  • Conmutación (telemetría)
  • Comparación de formatos de serialización de datos
  • Hibernar (Java)
  • Esquema XML
  • Reglas de codificación básicas
  • Búferes de protocolo de Google
  • Wikibase
  • Apache Avro

Referencias [ editar ]

  1. ^ Cline, Marshall. "Preguntas frecuentes de C ++:" ¿De qué se trata esta "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 por cable o inalámbrico, luego, más tarde, tal vez en otra computadora, revertir el proceso, resucitando los objetos originales. Los mecanismos básicos son aplanar el (los) objeto (s) en un flujo unidimensional de bits y convertir ese flujo de bits nuevamente en el (los) objeto (s) original (es).
  2. ^ http://www.ruby-doc.org/core/classes/Marshal.html
  3. ^ http://caml.inria.fr/pub/docs/manual-ocaml/libref/Marshal.html
  4. ^ https://docs.python.org/3/library/pickle.html?highlight=marshalling#module-pickle
  5. ^ S. Miller, Mark. "Serialización segura bajo sospecha mutua" . ERights.org . La serialización, que se explica a continuación, es un ejemplo de una herramienta que pueden utilizar los 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. ^ Sun Microsystems (1987). "XDR: Estándar de representación de datos externos" . RFC 1014 . Grupo de trabajo en 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. ^ "cereales Docs - principal" . uscilab.github.io .
  10. ^ https://golang.org/pkg/encoding/ . Falta o vacío |title=( ayuda )
  11. ^ https://github.com/go-yaml/yaml . Falta o vacío |title=( ayuda )
  12. ^ "Texto . Mostrar documentación" . Consultado el 15 de enero de 2014 .
  13. ^ "Ask TOM" Serializando objetos Java en la base de datos (y ge ... " " . Asktom.oracle.com .
  14. ^ "JSON" . Documentos web de MDN . Consultado el 22 de marzo de 2018 .
  15. ^ "JSON" . www.json.org . Consultado el 22 de marzo de 2018 .
  16. ^ 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 .
  17. ^ "Propuesta TC39: Subsume JSON" . Comité ECMA TC39. 22 de mayo de 2018.
  18. ^ "Serialización" . docs.julialang.org . Consultado el 24 de julio de 2018 .
  19. ^ "serialización más rápida y compacta de símbolos y cadenas · JuliaLang / julia @ bb67ff2" . GitHub .
  20. ^ "HDF5.jl: Guardar y cargar datos en formato de archivo HDF5" . 20 de agosto de 2017 - a través de GitHub.
  21. ^ "Julia: qué tan estable son serializar () / deserializar ()" . stackoverflow.com .
  22. ^ "Serializadores .NET" . Hay muchos tipos de serializadores; producen datos muy compactos muy rápido. Hay serializadores para mensajería, para almacenes de datos, para ordenar objetos. ¿Cuál es el mejor serializador en .NET?
  23. ^ "SERBENCH por aumcode" . aumcode.github.io .
  24. ^ "PHP: serialización de objetos - manual" . ca.php.net .
  25. Esser, Stephen (28 de noviembre de 2009). "Noticias impactantes en la explotación de PHP" . Suspekt .. . Archivado desde el original el 6 de enero de 2012.
  26. ^ "PHP: serializable - Manual" . www.php.net .
  27. ^ " " Término de lectura y escritura " " . www.swi-prolog.org .
  28. ^ " " write_term / [2,3] " " . sicstus.sics.se .
  29. ^ " " Término de entrada / salida " " . gprolog.org .
  30. ^ Herlihy, Maurice ; 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 .     
  31. ^ Birrell, Andrew; Jones, Mike; Wobber, Ted (noviembre de 1987). "Una implementación simple y eficiente para pequeñas bases de datos". Revisión de sistemas operativos de ACM SIGOPS: Actas del 11º Simposio de ACM sobre principios de sistemas operativos . 11 (5): 149-154. CiteSeerX 10.1.1.100.1457 . doi : 10.1145 / 41457.37517 . ISSN 0163-5980 . OCLC 476062921 . S2CID 12908261 .    Nuestra implementación hace uso de 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 permanente. 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 lea desde el disco, las direcciones sean reemplazado con direcciones válidas en el entorno de ejecución actual. El mecanismo de pickle es completamente automático: es impulsado por las estructuras de escritura en tiempo de ejecución que están presentes para nuestro mecanismo de recolección de basura. ... (*) El decapado es bastante similar al concepto de clasificación en llamadas a procedimientos remotos. Pero, de hecho, nuestra implementación de decapado funciona solo al interpretar en tiempo de ejecución la estructura de valores tipados dinámicamente, mientras que nuestra implementación RPC funciona solo generando código para la clasificación de valores tipados estáticamente. Cada instalación se beneficiaría de agregar los mecanismos de la otra, pero eso aún no se ha hecho.
  32. van Rossum, Guido (1 de diciembre de 1994). "Aplanamiento de objetos de 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 original 'marshal' solo, y Jim se quejó de que 'serialización' también significa algo totalmente diferente que es realmente 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,
  33. ^ a b "11.1. pickle - serialización de objetos de Python - documentación de Python 2.7.14rc1" . docs.python.org .
  34. ^ "pickle - serialización de objetos de Python - documentación de Python v3.0.1" . docs.python.org .
  35. ^ "Novedades de Python 3.0 - Documentación de Python v3.1.5" . docs.python.org .
  36. ^ [R manual http://stat.ethz.ch/R-manual/R-patched/library/base/html/dput.html ]
  37. ^ [Manual de R http://stat.ethz.ch/R-manual/R-patched/library/base/html/serialize.html ]
  38. ^ Eddelbuettel, Dirk; Stokely, Murray; Ooms, Jeroen (2014). "RProtoBuf: serialización de datos entre lenguajes eficiente en R". Revista de software estadístico . 71 (2). arXiv : 1401.7372 . doi : 10.18637 / jss.v071.i02 . S2CID 36239952 . 
  39. ^ "Serialización y archivado rápido" . www.github.com . 2018-12-02.

Enlaces externos [ editar ]

  • Documentación de serialización de objetos Java
  • Documentación de serialización de objetos de Java 1.4 .
  • Java duradero: serialización archivado el 25 de noviembre de 2005 en Wayback Machine.
  • Recursos de enlace de datos XML
  • Tablero de datos : serialización binaria con acceso parcial y aleatorio, sistema de tipos, RPC, adaptación de tipos y formato de texto