CodeGym /Java Blog /Random-IT /Formati di serializzazione Java
John Squirrels
Livello 41
San Francisco

Formati di serializzazione Java

Pubblicato nel gruppo Random-IT
CIAO! Parliamo di serializzazione. Probabilmente ricorderete che abbiamo già avuto lezioni sulla serializzazione. E così abbiamo fatto :) Ecco il primo Ed ecco il secondo. Se non ricordi bene come funziona la serializzazione, perché è necessaria la serializzazione e quali strumenti ha Java per la serializzazione, puoi seguire queste lezioni. La lezione di oggi riguarderà la teoria. Daremo un'occhiata più da vicino ai formati di serializzazione. Innanzitutto, ricordiamo cos'è la serializzazione. La serializzazione è il processo di memorizzazione dello stato di un oggetto in una sequenza di byte. La deserializzazione è il processo di ripristino di un oggetto da questi byte. Un oggetto Java può essere serializzato e inviato su una rete (ad esempio, a un altro computer). La sequenza di byte può essere rappresentata in diversi formati. Hai familiarità con questo concetto dall'uso ordinario del computer. Ad esempio, un libro elettronico (o un semplice documento di testo) può essere scritto in una serie di formati diversi:
  • docx (formato Microsoft Word);
  • pdf (formato Adobe);
  • mobi (comunemente utilizzato sui dispositivi Amazon Kindle);
  • e molto altro (ePub, djvu, fb2, ecc.).
In ogni caso, l'obiettivo sembra essere lo stesso: presentare il testo in una forma leggibile dall'uomo. Tuttavia, le persone hanno inventato molti formati diversi. Senza entrare nei dettagli del loro lavoro, possiamo presumere che avessero buone ragioni. Ogni formato ha i suoi vantaggi e svantaggi rispetto al resto. Forse sono stati creati vari formati di serializzazione seguendo questi stessi principi? Ottima ipotesi, studente! :) Esatto. La realtà è che l'invio di dati via cavo (o in modalità wireless) è un affare complicato e coinvolge molti fattori. Chi invia i dati? Dove? Che volume? Il destinatario sarà un essere umano o un computer (cioè i dati dovrebbero essere leggibili dall'uomo)? Quale dispositivo leggerà i dati? Ovviamente, queste situazioni sono diverse. Una cosa è inviare un'immagine da 500 KB da uno smartphone a un altro. Ed è tutt'altra cosa se parliamo di 500 terabyte di dati aziendali che devono essere compressi in modo ottimale e inviati nel minor tempo possibile. Conosciamo i principali formati di serializzazione e consideriamo i vantaggi e gli svantaggi di ciascuno di essi!

JSON

Notazione oggetto JavaScript. Sai già qualcosa su questo formato! Ne abbiamo parlato in questa lezione e abbiamo coperto la serializzazione in JSON proprio qui . Ha preso il nome per un motivo. Gli oggetti Java convertiti in JSON in realtà sembrano esattamente come gli oggetti in JavaScript. Non è necessario conoscere JavaScript per comprendere il nostro oggetto:

{
   "title": "War and Peace",
   "author": "Lev Tolstoy",
   "year": 1869
}
Non ci limitiamo a inviare un singolo oggetto. Il formato JSON può anche rappresentare un array di oggetti:

[
 {
   "title": "War and Peace",
   "author": "Lev Tolstoy",
   "year": 1869
 },

 {
   "title": "Demons",
   "author": "Fyodor Dostoyevsky",
   "year": 1872
 },

 {
   "title": "The Seagull",
   "author": "Anton Chekhov",
   "year": 1896
 }
]
Poiché JSON rappresenta oggetti JavaScript, supporta i seguenti formati di dati JavaScript:
  • stringhe;
  • numeri;
  • oggetti;
  • matrici;
  • booleani (vero e falso);
  • nullo.
Quali sono i vantaggi di JSON?
  1. Formato leggibile dall'uomo. Questo è un ovvio vantaggio se il tuo utente finale è umano. Ad esempio, supponiamo che il tuo server disponga di un database con un programma di voli. Un cliente umano, seduto al suo computer a casa, richiede dati da questo database utilizzando un'applicazione web. Poiché devi fornire i dati in un formato comprensibile, JSON è un'ottima soluzione.

  2. Semplicità. È super semplice :) Sopra, abbiamo fornito un esempio di due file JSON. E anche se non hai sentito parlare di JavaScript (per non parlare degli oggetti JavaScript), puoi facilmente capire il tipo di oggetti descritti lì.
    L'intera documentazione JSON consiste in una pagina web con un paio di immagini.

  3. Uso diffuso. JavaScript è il linguaggio front-end dominante e ha i suoi requisiti. L'uso di JSON è un must. Pertanto, un numero enorme di servizi Web utilizza JSON come formato di scambio dei dati. Ogni IDE moderno supporta il formato JSON (incluso IntelliJ IDEA). Sono state scritte un sacco di librerie per tutti i tipi di linguaggi di programmazione per consentire di lavorare con JSON.

Ad esempio, hai già lavorato con la libreria Jackson in una lezione in cui abbiamo imparato a serializzare oggetti Java in JSON. Ma oltre a Jackson, abbiamo, ad esempio, GSON , che è una comoda libreria di Google.

YAML

Inizialmente, YAML stava per "Yet Another Markup Language". Quando è iniziato, è stato posizionato come concorrente di XML. Ora, con il passare del tempo, YAML ha assunto il significato di "YAML Ain't Markup Language". Cos'è esattamente? Immaginiamo di dover creare 3 classi per rappresentare i personaggi in un gioco per computer: Guerriero, Mago e Ladro. Avranno le seguenti caratteristiche: forza, agilità, resistenza, un set di armi. Ecco come sarebbe un file YAML che descrive le nostre classi:

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
Un file YAML ha una struttura ad albero: alcuni elementi sono nidificati in altri. Possiamo controllare l'annidamento usando un certo numero di spazi, che usiamo per denotare ogni livello. Quali sono i vantaggi del formato YAML?
  1. Leggibile dagli umani. Ancora una volta, anche vedendo un file YAML senza una descrizione, puoi facilmente capire gli oggetti che descrive. YAML è così leggibile dall'uomo che il sito web yaml.org è un normale file YAML :)

  2. Compattezza. La struttura del file viene creata utilizzando gli spazi: non è necessario utilizzare parentesi o virgolette.

  3. Supporto per strutture dati native per linguaggi di programmazione. L'enorme vantaggio di YAML rispetto a JSON e molti altri formati è che supporta varie strutture di dati. Loro includono:

    • !!map
      Un insieme non ordinato di coppie chiave-valore che non possono avere duplicati;

    • !!omap
      Una sequenza ordinata di coppie chiave-valore che non possono avere duplicati;

    • !!pairs:
      una sequenza ordinata di coppie chiave-valore che possono avere duplicati;

    • !!set
      Una sequenza non ordinata di valori che non sono uguali tra loro;

    • !!seq
      Una sequenza di valori arbitrari;

    Riconoscerai alcune di queste strutture da Java! :) Ciò significa che varie strutture dati da linguaggi di programmazione possono essere serializzate in YAML.

  4. Possibilità di utilizzare anchor e alias

    Questi marcatori ti consentono di identificare alcuni elementi in un file YAML e quindi fare riferimento ad esso nel resto del file se si verifica ripetutamente. Viene creato un ancoraggio utilizzando il simbolo & e viene creato un alias utilizzando * .

    Supponiamo di avere un file che descrive i libri di Leo Tolstoy. Per evitare di scrivere il nome dell'autore per ogni libro, creiamo semplicemente l'ancora leo e ci riferiamo ad essa usando un alias quando ne abbiamo bisogno:

    
    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
    

    Quando questo file viene analizzato, il valore "Leo Tolstoy" viene sostituito nei posti giusti dove abbiamo i nostri alias.

  5. YAML può incorporare dati in altri formati. Ad esempio, 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
            }
          ]
    

Altri formati di serializzazione

XML

Questo formato si basa su un albero di tag.

<book>
   <title>Harry Potter and the Philosopher’s Stone</title>
   <author>J. K. Rowling</author>
   <year>1997</year>
</book>
Ogni elemento è costituito da un tag di apertura e di chiusura (<> e </>). Ogni elemento può avere elementi nidificati. XML è un formato comune che è buono quanto JSON e YAML (se parliamo di progetti reali). Abbiamo una lezione separata su XML .

BSON (JSON binario)

Come suggerisce il nome, BSON è molto simile a JSON, ma non è leggibile dall'uomo e utilizza dati binari. Di conseguenza, è ottimo per archiviare e trasferire immagini e altri allegati. Inoltre, BSON supporta alcuni tipi di dati non disponibili in JSON. Ad esempio, un file BSON può includere una data (in formato millisecondo) o anche un pezzo di codice JavaScript. Il popolare database MongoDB NoSQL memorizza le informazioni in formato BSON.

Protocollo basato sulla posizione

In alcune situazioni, dobbiamo ridurre drasticamente la quantità di dati inviati (ad esempio, se abbiamo molti dati e dobbiamo ridurre il carico). In questa situazione, possiamo utilizzare il protocollo basato sulla posizione, ovvero inviare i valori dei parametri senza i nomi dei parametri stessi.

"Leo Tolstoy" | "Anna Karenina" | 1873
I dati in questo formato occupano molto meno spazio di un file JSON completo. Naturalmente, ci sono altri formati di serializzazione, ma non è necessario conoscerli tutti in questo momento :) È utile se hai familiarità con gli attuali formati standard del settore durante lo sviluppo di applicazioni e ricordi i loro vantaggi e come differiscono da uno un altro. E con questo, la nostra lezione giunge al termine :) Non dimenticare di risolvere un paio di compiti oggi! Fino alla prossima volta! :)
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION