JavaRush /Blog Java /Random-ES /Formatos de serialización en Java

Formatos de serialización en Java

Publicado en el grupo Random-ES
¡Hola! Hablemos de serialización en Java. Probablemente recuerdes que ya tuvimos conferencias sobre serialización. Así es :) Aquí está el primero Y aquí está el segundo Si no recuerdas muy bien cómo funciona la serialización, por qué es necesaria y qué herramientas existen para ello en Java, puedes leer estas conferencias. La conferencia de hoy será teórica y en ella analizaremos más de cerca los formatos de serialización. Formatos de serialización en Java - 1Primero, recordemos qué es la serialización. La serialización es el proceso de almacenar el estado de un objeto en una secuencia de bytes. La deserialización es el proceso de reconstruir un objeto a partir de estos bytes. Un objeto Java se puede serializar y transferir a través de una red (por ejemplo, a otra computadora). Entonces, esta misma secuencia de bytes se puede representar en diferentes formatos. Esto lo sabe usted por el uso diario de la computadora. Por ejemplo, el libro electrónico (o documento de texto simple) que está leyendo se puede escribir en varios formatos diferentes:
  • docx (formato de Microsoft Word);
  • pdf (formato Adobe);
  • mobi (comúnmente utilizado en dispositivos Kindle de Amazon);
  • y mucho más (ePub, djvu, fb2...).
Parecería que la tarea es la misma: presentar el texto en una forma legible por humanos. Pero la gente ha inventado una gran cantidad de formatos. Incluso sin entrar en detalles de su trabajo, podemos suponer que esto se hizo por una razón. Probablemente cada uno de ellos tenga sus propias ventajas y desventajas en comparación con los demás. ¿Quizás los formatos de serialización se crearon según el mismo principio? ¡Bien, buena suposición, estudiante! :) Tal como es. El hecho es que transmitir datos a distancia es algo bastante delicado y en ello intervienen muchos factores. ¿Quién transmite los datos? ¿Dónde? ¿Qué volumen? ¿La parte receptora será una persona o una máquina (es decir, los datos deberían ser legibles por humanos)? ¿Qué tipo de dispositivo leerá los datos? Evidentemente, las situaciones son diferentes. Una cosa es cuando necesitas transferir una imagen de 500 KB de un teléfono inteligente a otro. Y es completamente diferente cuando hablamos de 500 terabytes de datos empresariales que deben comprimirse de la manera más eficiente posible y al mismo tiempo transferirse lo más rápido posible. ¡Echemos un vistazo a los principales formatos de serialización y veamos las ventajas y desventajas de cada uno!

JSON

Notación de objetos JavaScript. ¡Ya estás un poco familiarizado con él! Hablamos de ello en esta conferencia y analizamos la serialización en JSON aquí . Recibió su nombre por una razón. Los objetos Java convertidos a JSON en realidad se ven exactamente como objetos JavaScript. No necesitas saber JavaScript para entender el significado de nuestro objeto:
{
   "title": "Война и мир",
   "author": "Лев Толстой",
   "year": 1869
}
No es necesario pasar un objeto. JSON también puede contener una serie de objetos:
[
 {
   "title": "Война и мир",
   "author": "Лев Толстой",
   "year": 1869
 },

 {
   "title": "Бесы",
   "author": "Федор Достоевский",
   "year": 1872
 },

 {
   "title": "Чайка",
   "author": "Антон Чехов",
   "year": 1896
 }
]
Dado que JSON es un objeto JavaScript, admite los siguientes formatos de datos JavaScript:
  • instrumentos de cuerda;
  • números (número);
  • objetos (objeto);
  • matrices (matriz);
  • valores booleanos (verdadero y falso);
  • nulo.
¿Qué ventajas tiene JSON?
  1. Formato legible por humanos. Esta es una ventaja obvia si el usuario final es un humano. Por ejemplo, su servidor almacena una base de datos con horarios de vuelos. Un cliente humano solicita datos de esta base de datos utilizando una aplicación web mientras está sentado en casa frente a una computadora. Dado que necesita proporcionar los datos en un formato que él pueda entender, JSON es una gran solución.

  2. Sencillez. Se podría decir que es elemental :) Arriba dimos un ejemplo de dos archivos JSON. E incluso si nunca ha oído hablar de la existencia de JavaScript (y mucho menos de sus objetos), puede comprender fácilmente qué tipo de objetos se describen allí.
    Toda la documentación JSON es una página web con un par de imágenes.

  3. Generalizado. JavaScript es el lenguaje de interfaz de usuario dominante y dicta sus términos. Usar JSON es imprescindible. Por tanto, una gran cantidad de servicios web utilizan JSON como formato para intercambiar datos. Todos los IDE modernos admiten el formato JSON (incluido Intellij IDEA). Se han escrito varias bibliotecas para trabajar con JSON para todos los lenguajes de programación posibles.

Por ejemplo, ya trabajó con la biblioteca Jackson en la conferencia donde aprendimos a serializar objetos Java en JSON. Pero además de Jackson existe, por ejemplo, GSON , una biblioteca muy cómoda de Google.

YAML

Al comienzo de su existencia, significaba Yet Another Markup Language, "otro lenguaje de marcado". En ese momento se posicionó como competidor de XML. Ahora, después del paso del tiempo, significa “YAML Ain't Markup Language” (“YAML no es un lenguaje de marcado”). ¿Cómo es él? Imaginemos que necesitamos crear 3 clases de personajes para nuestro juego de computadora: Guerrero, Mago y Ladrón. Contarán con las siguientes características: fuerza, agilidad, resistencia y un conjunto de armas. Así es como se verá nuestro archivo YAML con descripciones de clases:
classes:
 class-1:
   title: Warrior
   power: 8
   agility: 4
   stamina: 7
   weapons:
     - sword
     - spear

 class-2:
   title: Mage
   power: 5
   agility: 7
   stamina: 5
   weapons:
     - magic staff

 class-3:
   title: Thief
   power: 6
   agility: 6
   stamina: 5
   weapons:
     - dagger
     - poison
El archivo YAML tiene una estructura de árbol: algunos elementos están anidados dentro de otros. Podemos controlar el anidamiento utilizando una cierta cantidad de espacios para indicar cada nivel. ¿Qué ventajas tiene el formato YAML?
  1. Legible por humanos. Nuevamente, incluso si ve un archivo yaml sin una descripción, puede comprender fácilmente qué objetos se describen allí. YAML es tan legible para los humanos que la página principal de yaml.org es un archivo yaml normal :)

  2. Compacidad. La estructura del archivo está formada por espacios: no es necesario utilizar corchetes ni comillas.

  3. Soporte para estructuras de datos nativas de lenguajes de programación. Una gran ventaja de YAML sobre JSON y muchos otros formatos es que admite diferentes estructuras de datos. Entre ellos:

    • !!map
      Una colección desordenada de pares clave:valor sin posibilidad de duplicados;

    • !!omap
      Una secuencia ordenada de pares clave:valor sin posibilidad de duplicados;

    • !!pairs:
      Una secuencia ordenada de pares clave:valor con posibilidad de duplicados;

    • !!set
      Una secuencia desordenada de valores que no son iguales entre sí;

    • !!seq
      Secuencia de valores arbitrarios;

    ¡Algunas de estas estructuras le resultarán familiares en Java! :) Gracias a esta función, puede serializar varias estructuras de datos de lenguajes de programación al formato YAML.

  4. Posibilidad de utilizar ancla y alias.

    Traducción de las palabras “ancla” y “alias” - “ancla” y “seudónimo”. En principio, describe con bastante precisión la esencia de estos términos en YAML.

    Le permiten identificar un elemento en un archivo yaml y hacer referencia a él en el resto del archivo si ocurre repetidamente. El ancla se crea usando el símbolo &y el alias se crea usando *.

    Digamos que tenemos un archivo con descripciones de los libros de León Tolstoi. Para evitar escribir el nombre del autor manualmente cada vez, simplemente crearemos un ancla "leo" y nos referiremos a él usando un alias cuando lo necesitemos:

    books:
     book-1:
       title: War and Peace
       author: &leo Leo Tolstoy
       year: 1869
    
     book-2:
       title: Anna Karenina
       author: *leo
       year: 1873
    
     book-3:
       title: Family Happiness
       author: *leo
       year: 1859

    Cuando leamos este archivo con algún analizador, el valor "León Tolstoi" se sustituirá en los lugares correctos en lugar de nuestro alias.

  5. Puede incrustar datos en otros formatos en YAML. Por ejemplo, JSON:

    books: [
            {
              "title": "War and Peace",
              "author": "Leo Tolstoy",
              "year": 1869
            },
    
            {
              "title": "Anna Karenina",
              "author": "Leo Tolstoy",
              "year": 1873
            },
    
            {
              "title": "Family Happiness",
              "author": "Leo Tolstoy",
              "year": 1859
            }
          ]

Otros formatos de serialización

XML

Este formato se basa en el llamado árbol de etiquetas.
<book>
   <title>Harry Potter and the Philosopher’s Stone</title>
   <author>J. K. Rowling</author>
   <year>1997</year>
</book>
Cada elemento consta de una etiqueta de apertura y cierre (<> y </>). Cada elemento puede tener elementos anidados. XML es un formato común, no inferior a JSON y YAML (si hablamos de uso en proyectos reales). Tenemos una conferencia separada sobre XML .

BSON (JSON binario)

Como sugiere su nombre, es muy similar a JSON, pero no es legible por humanos y opera con datos en formato binario. Esto lo hace muy conveniente para almacenar y transferir imágenes y otros archivos adjuntos. Además, BSON admite algunos tipos de datos que no están disponibles en JSON. Por ejemplo, puede escribir una fecha (en formato de milisegundos) o incluso un fragmento de código JavaScript en un archivo BSON. La popular base de datos NoSQL MongoDB almacena información en formato BSON.

Protocolo basado en posición

En algunas situaciones, necesitamos reducir drásticamente la cantidad de datos transferidos (por ejemplo, si hay muchos datos y necesitamos reducir la carga). En esta situación, podemos usar un protocolo basado en posición , es decir, pasar valores de parámetros sin los nombres de los parámetros mismos.
"Leo Tolstoy" | "Anna Karenina" | 1873
Los datos en este formato ocupan mucho menos espacio que un archivo JSON completo. Por supuesto, existen otros formatos de serialización, pero no es necesario que los conozca todos ahora :) Es bueno estar familiarizado con los formatos que ahora son el estándar de la industria para el desarrollo de aplicaciones y recordar sus ventajas y diferencias entre sí. . Y nuestra conferencia ha llegado a su fin :) ¡No olvides resolver un par de problemas hoy! ¡Hasta luego! :)
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION