JavaRush /Java Blog /Random-IT /Formati di serializzazione in Java

Formati di serializzazione in Java

Pubblicato nel gruppo Random-IT
Ciao! Parliamo di serializzazione in Java. Probabilmente ricorderai che avevamo già tenuto lezioni sulla serializzazione. Esatto :) Ecco il primo Ed ecco il secondo Se non ricordi molto bene come funziona la serializzazione, perché è necessaria e quali strumenti ci sono in Java, puoi dare un'occhiata a queste lezioni. La lezione di oggi sarà teorica e daremo uno sguardo più da vicino ai formati di serializzazione. Formati di serializzazione in Java - 1Innanzitutto, 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 ricostruzione di un oggetto da questi byte. Un oggetto Java può essere serializzato e trasferito su una rete (ad esempio, su un altro computer). Quindi, questa stessa sequenza di byte può essere rappresentata in diversi formati. Lo conosci dall'uso quotidiano del computer. Ad esempio, l'e-book (o un semplice documento di testo) che stai leggendo può essere scritto in numerosi formati diversi:
  • docx (formato Microsoft Word);
  • pdf (formato Adobe);
  • mobi (comunemente utilizzato nei dispositivi Amazon Kindle);
  • e molto altro (ePub, djvu, fb2...).
Sembrerebbe che il compito sia lo stesso: presentare il testo in una forma leggibile dall'uomo. Ma le persone hanno inventato un sacco di formati. Anche senza entrare nei dettagli del loro lavoro, possiamo supporre che ciò sia stato fatto per un motivo. Ognuno di essi probabilmente ha i suoi vantaggi e svantaggi rispetto agli altri. Forse i formati di serializzazione sono stati creati secondo lo stesso principio? Bene, buona ipotesi, studente! :) Così com'è. Il fatto è che la trasmissione di dati a distanza è una cosa piuttosto delicata e ci sono molti fattori in essa. Chi trasmette i dati? Dove? Che volume? La parte ricevente sarà una persona o una macchina (ovvero i dati dovranno essere leggibili dall'uomo)? Che tipo di dispositivo leggerà i dati? Ovviamente le situazioni sono diverse. Una cosa è quando devi trasferire un'immagine da 500 KB da uno smartphone all'altro. La situazione è completamente diversa quando parliamo di 500 terabyte di dati aziendali che devono essere compressi nel modo più efficiente possibile e allo stesso tempo trasferiti il ​​più rapidamente possibile. Diamo un'occhiata ai principali formati di serializzazione e osserviamo i vantaggi e gli svantaggi di ciascuno!

JSON

Notazione oggetto JavaScript. Lo conosci già un po'! Ne abbiamo parlato in questa lezione e abbiamo esaminato la serializzazione in JSON qui . Ha preso il nome per un motivo. Gli oggetti Java convertiti in JSON in realtà assomigliano esattamente agli oggetti JavaScript. Non è necessario conoscere JavaScript per comprendere il significato del nostro oggetto:
{
   "title": "Война и мир",
   "author": "Лев Толстой",
   "year": 1869
}
Non è necessario passare un oggetto. JSON può anche contenere una serie di oggetti:
[
 {
   "title": "Война и мир",
   "author": "Лев Толстой",
   "year": 1869
 },

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

 {
   "title": "Чайка",
   "author": "Антон Чехов",
   "year": 1896
 }
]
Poiché JSON è un oggetto JavaScript, supporta i seguenti formati di dati JavaScript:
  • stringhe;
  • numeri (numero);
  • oggetti (oggetto);
  • array (array);
  • valori booleani (vero e falso);
  • nullo.
Quali vantaggi ha JSON?
  1. Formato leggibile dall'uomo. Questo è un ovvio vantaggio se il tuo utente finale è umano. Ad esempio, il tuo server memorizza un database con gli orari dei voli. Un cliente umano richiede dati da questo database utilizzando un'applicazione web mentre è seduto a casa davanti a un computer. Poiché è necessario fornire i dati in un formato comprensibile, JSON è un'ottima soluzione.

  2. Semplicità. Si potrebbe dire che è elementare :) Sopra abbiamo fornito un esempio di due file JSON. E anche se non hai mai sentito parlare dell'esistenza di JavaScript (per non parlare dei suoi oggetti), puoi facilmente capire che tipo di oggetti vengono descritti lì.
    L'intera documentazione JSON è una pagina Web con un paio di immagini.

  3. Esteso. JavaScript è il linguaggio front-end dominante e ne detta i termini. Usare JSON è un must. Pertanto, un numero enorme di servizi Web utilizza JSON come formato per lo scambio di dati. Ogni IDE moderno supporta il formato JSON (incluso Intellij IDEA). Sono state scritte numerose librerie per lavorare con JSON per tutti i possibili linguaggi di programmazione.

Ad esempio, hai già lavorato con la libreria Jackson nella lezione in cui abbiamo imparato a serializzare gli oggetti Java in JSON. Ma oltre a Jackson c'è, ad esempio, GSON , una libreria molto conveniente di Google.

YAML

All’inizio della sua esistenza stava per Yet Another Markup Language – “un altro linguaggio di markup”. All'epoca era posizionato come concorrente di XML. Ora, con il passare del tempo, sta per “YAML Ain't Markup Language” (“YAML non è un linguaggio di markup”). Come è lui? Immaginiamo di dover creare 3 classi di personaggi per il nostro gioco per computer: Guerriero, Mago e Ladro. Avranno le seguenti caratteristiche: forza, agilità, resistenza e un set di armi. Questo è come apparirà il nostro file YAML con le descrizioni delle 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
Il file YAML ha una struttura ad albero: alcuni elementi sono annidati all'interno di altri. Possiamo controllare l'annidamento utilizzando un certo numero di spazi per denotare ciascun livello. Quali vantaggi ha il formato YAML?
  1. Leggibile dagli umani. Ancora una volta, anche se vedi un file yaml senza descrizione, puoi facilmente capire quali oggetti sono descritti lì. YAML è così leggibile dall'uomo che la pagina principale di yaml.org è un normale file yaml :)

  2. Compattezza. La struttura del file è formata da spazi: non è necessario utilizzare parentesi o virgolette.

  3. Supporto per strutture dati native dei linguaggi di programmazione. Un enorme vantaggio di YAML rispetto a JSON e molti altri formati è che supporta diverse strutture dati. Tra loro:

    • !!map
      Una raccolta non ordinata di coppie chiave:valore senza possibilità di duplicati;

    • !!omap
      Una sequenza ordinata di coppie chiave:valore senza possibilità di duplicati;

    • !!coppie:
      una sequenza ordinata di coppie chiave:valore con possibilità di duplicati;

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

    • !!seq
      Sequenza di valori arbitrari;

    Alcune di queste strutture ti saranno familiari da Java! :) Grazie a questa funzionalità, puoi serializzare varie strutture dati dai linguaggi di programmazione nel formato YAML.

  4. Possibilità di utilizzare ancoraggi e alias

    Traduzione delle parole "ancora" e "alias" - "ancora" e "pseudonimo". In linea di principio, descrive in modo abbastanza accurato l'essenza di questi termini in YAML.

    Permettono di identificare un elemento in un file yaml e di farvi riferimento nel resto del file se si verifica ripetutamente. L'ancoraggio viene creato utilizzando il simbolo &e l'alias viene creato utilizzando *.

    Supponiamo di avere un file con le descrizioni dei libri di Leone Tolstoj. Per evitare di scrivere ogni volta manualmente il nome dell'autore, creeremo semplicemente un'ancora "leo" e faremo riferimento ad essa utilizzando un alias quando ne avremo 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 leggeremo questo file con qualche parser, il valore “Leo Tolstoy” verrà sostituito nei posti giusti al posto del nostro alias.

  5. Puoi incorporare dati in altri formati in YAML. 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 sul cosiddetto albero dei 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 uno di chiusura (<> e </>). Ogni elemento può avere elementi nidificati. XML è un formato comune, non inferiore a JSON e YAML (se parliamo di utilizzo in progetti reali). Abbiamo una lezione separata su XML .

BSON (JSON binario)

Come suggerisce il nome, è molto simile a JSON, ma non è leggibile dall'uomo e opera su dati in formato binario. Ciò lo rende molto comodo per archiviare e trasferire immagini e altri allegati. Inoltre, BSON supporta alcuni tipi di dati che non sono disponibili in JSON. Ad esempio, puoi scrivere una data (in formato millisecondo) o anche un pezzo di codice JavaScript in un file BSON. Il popolare database NoSQL MongoDB memorizza le informazioni in formato BSON.

Protocollo basato sulla posizione

In alcune situazioni, dobbiamo ridurre drasticamente la quantità di dati trasferiti (ad esempio, se i dati sono molti e dobbiamo ridurre il carico). In questa situazione possiamo utilizzare il protocollo position based , cioè passare 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, esistono altri formati di serializzazione, ma non è necessario conoscerli tutti adesso :) È utile avere familiarità con i formati che ora sono lo standard del settore per lo sviluppo di applicazioni e ricordare i vantaggi e le differenze reciproci . E la nostra lezione è giunta al termine :) Non dimenticare di risolvere un paio di problemi oggi! Ci vediamo! :)
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION