JavaRush /Java Blog /Random-JA /Java のシリアル化形式

Java のシリアル化形式

Random-JA グループに公開済み
こんにちは!Java でのシリアル化について話しましょう。すでに連載についての講義を行ったことを覚えているかもしれません。そうです :) これが最初の講義です。 そして、これが2 番目の講義 です。シリアル化がどのように機能するか、シリアル化が必要な理由、および Java にはどのようなツールがあるのか​​をよく覚えていない場合は、これらの講義をざっと読んでも構いません。今日の講義は理論的なもので、その中で連載形式について詳しく見ていきます。Java のシリアル化形式 - 1まず、シリアル化とは何かを思い出してください。シリアル化は、オブジェクトの状態をバイトのシーケンスに格納するプロセスです。逆シリアル化は、これらのバイトからオブジェクトを再構築するプロセスです。Java オブジェクトはシリアル化して、ネットワーク経由で (たとえば、別のコンピュータに) 転送できます。したがって、この同じバイト シーケンスを異なる形式で表すことができます。これについては、日常的にコンピュータを使用することからよく知られています。たとえば、あなたが読んでいる電子書籍 (または単純なテキスト ドキュメント) は、さまざまな形式で記述されている可能性があります。
  • docx (Microsoft Word 形式);
  • pdf (Adobe 形式);
  • mobi (Amazon Kindle デバイスで一般的に使用されます)。
  • などなど (ePub、djvu、fb2...)
タスクは同じであるように見えます。つまり、人間が読める形式でテキストを表示することです。しかし、人々はたくさんのフォーマットを発明してきました。彼らの仕事の詳細に立ち入らなくても、これには理由があって行われたと推測できます。おそらく、それぞれに他のものと比較して独自の長所と短所があります。おそらくシリアル化形式も同じ原理に従って作成されたのでしょうか? そうですね、学生さん、よく考えてください!:) その通りです。実際のところ、遠隔地にデータを送信するのはかなりデリケートな作業であり、それには多くの要因があります。データを送信するのは誰ですか? どこ?何巻ですか?受信側は人間ですか、それとも機械ですか (つまり、データは人間が判読できる必要があります)。データを読み取るデバイスの種類は何ですか? 明らかに状況が異なります。500KB の画像をあるスマートフォンから別のスマートフォンに転送する必要がある場合は、これが別のことになります。そして、できるだけ効率的に圧縮し、同時にできるだけ早く転送する必要がある 500 テラバイトのビジネス データについて話している場合は、まったく異なります。主な連載形式を紹介し、それぞれのメリット・デメリットを見ていきましょう!

JSON

JavaScript オブジェクト表記法。あなたはすでに彼のことを少し知っています!この講義ではこれについて説明し、ここではJSON でのシリアル化について説明しました。それには理由があってその名前が付けられました。JSON に変換された Java オブジェクトは、実際には JavaScript オブジェクトとまったく同じように見えます。オブジェクトの意味を理解するために JavaScript を理解する必要はありません。
{
   "title": "Война и мир",
   "author": "Лев Толстой",
   "year": 1869
}
1 つのオブジェクトを渡す必要はありません。JSON にはオブジェクトの配列を含めることもできます。
[
 {
   "title": "Война и мир",
   "author": "Лев Толстой",
   "year": 1869
 },

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

 {
   "title": "Чайка",
   "author": "Антон Чехов",
   "year": 1896
 }
]
JSON は JavaScript オブジェクトであるため、次の JavaScript データ形式をサポートします。
  • 文字列;
  • 数字(数字);
  • オブジェクト (オブジェクト);
  • 配列 (配列);
  • ブール値 (true と false);
  • ヌル。
JSONにはどのような利点があるのでしょうか?
  1. 人間が読める形式。エンド ユーザーが人間である場合、これは明らかな利点です。たとえば、サーバーにはフライト スケジュールを含むデータベースが保存されています。人間のクライアントは、自宅のコンピューターに座っているときに、Web アプリケーションを使用してこのデータベースにデータを要求します。データを彼が理解できる形式で提供する必要があるため、JSON は優れたソリューションです。

  2. シンプルさ。これは初歩的だと言えるかもしれません :) 上では 2 つの JSON ファイルの例を示しました。また、JavaScript の存在 (オブジェクトはおろか) を聞いたことがなくても、そこにどのようなオブジェクトが記述されているかを簡単に理解できます。
    JSON ドキュメント全体は、いくつかの画像を含む1 つのWeb ページです。

  3. 広く普及しています。JavaScript は主要なフロントエンド言語であり、JavaScript がその用語を決定します。JSON の使用は必須です。したがって、膨大な数の Web サービスがデータ交換の形式として JSON を使用しています。最新の IDE はすべて JSON 形式をサポートしています (Intellij IDEA を含む)。考えられるすべてのプログラミング言語の JSON を操作するために、多数のライブラリが作成されています。

たとえば、Java オブジェクトを JSON にシリアル化する方法を学習した講義で、すでに Jackson ライブラリを使用しました。しかし、Jackson 以外にも、たとえば、Google の非常に便利なライブラリで あるGSON があります。

YAML

その存在の当初は、Yet Another Markup Language、つまり「別のマークアップ言語」を表していました。当時、XML の競合他社として位置付けられていました。時が経った現在、これは「YAML Ain't Markup Language」(「YAML はマークアップ言語ではない」)の略です。彼はどういう感じ?コンピューター ゲーム用に、Warrior、Mage、Thief の 3 つのキャラクター クラスを作成する必要があると想像してみましょう。彼らは次のような特徴を持っています: 強さ、敏捷性、持久力、そして一連の武器。クラスの説明を含む YAML ファイルは次のようになります。
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
YAML ファイルはツリー構造になっており、一部の要素は他の要素内にネストされています。各レベルを示すために特定の数のスペースを使用することで、入れ子を制御できます。YAML 形式にはどのような利点がありますか?
  1. 人間が読める形式。繰り返しになりますが、説明のない yaml ファイルを見ても、そこにどのようなオブジェクトが記述されているかは簡単に理解できます。YAML は、 yaml.orgのメイン ページが通常の yaml ファイルであることを人間がどの程度読みやすいかを表します :)

  2. コンパクトさ。ファイル構造はスペースで形成されます。括弧や引用符を使用する必要はありません。

  3. プログラミング言語に固有のデータ構造のサポート。JSON や他の多くの形式に対する YAML の大きな利点は、さまざまなデータ構造をサポートしていることです。その中で:

    • !!map
      重複の可能性がない、順序付けされていないキー:値のペアのコレクション。

    • !!omap
      重複の可能性がない、キー:値のペアの順序付けされたシーケンス。

    • !!pairs:
      重複の可能性があるキーと値のペアの順序付けされたシーケンス。

    • !!set
      互いに等しくない、順序のない値のシーケンス。

    • !!seq
      任意の値のシーケンス。

    これらの構造の中には、Java でよく知られているものもあります。:) この機能のおかげで、プログラミング言語のさまざまなデータ構造を YAML 形式にシリアル化できます。

  4. アンカーとエイリアスを使用する機能

    「アンカー」と「エイリアス」という言葉の翻訳 - 「アンカー」と「仮名」。原則として、YAML ではこれらの用語の本質が非常に正確に説明されています。

    これらを使用すると、yaml ファイル内の要素を識別し、それが繰り返し発生する場合にファイルの残りの部分でその要素を参照できます。アンカーはシンボルを使用して作成され&、エイリアスは を使用して作成されます*

    レフ・トルストイの本の説明を含むファイルがあるとします。作成者の名前を毎回手動で記述することを避けるために、単純にアンカー「leo」を作成し、必要なときにエイリアスを使用してそれを参照します。

    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

    このファイルをパーサーで読み取ると、エイリアスの代わりに値「Leo Tolstoy」が適切な場所に置き換えられます。

  5. YAML には他の形式のデータを埋め込むことができます。たとえば、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
            }
          ]

他のシリアル化形式

XML

この形式は、いわゆるタグ ツリーに基づいています。
<book>
   <title>Harry Potter and the Philosopher’s Stone</title>
   <author>J. K. Rowling</author>
   <year>1997</year>
</book>
各要素は開始タグと終了タグ (<> と </>) で構成されます。各要素にはネストされた要素を含めることができます。XML は一般的な形式であり、(実際のプロジェクトでの使用について言えば) JSON や YAML に劣りません。XML については別の講義を用意しています。

BSON (バイナリ JSON)

その名前が示すように、JSON に非常に似ていますが、人間が判読できるものではなく、バイナリ形式のデータを操作します。これにより、画像やその他の添付ファイルの保存と転送に非常に便利になります。さらに、BSON は、JSON では使用できないいくつかのデータ型をサポートします。たとえば、日付 (ミリ秒形式) や JavaScript コードの一部を BSON ファイルに書き込むことができます。人気の NoSQL データベース MongoDB は、情報を BSON 形式で保存します。

位置ベースのプロトコル

状況によっては、転送されるデータ量を大幅に減らす必要がある場合があります (たとえば、大量のデータがあり、負荷を軽減する必要がある場合)。この状況では、位置ベースのプロトコルを使用できます。つまり、パラメーター自体の名前なしでパラメーター値を渡すことができます。
"Leo Tolstoy" | "Anna Karenina" | 1873
この形式のデータは、本格的な JSON ファイルよりもはるかに少ないスペースを必要とします。もちろん、他のシリアル化形式もありますが、今すぐすべてを知る必要はありません :) 現在アプリケーション開発の業界標準となっている形式についてよく理解し、それぞれの利点と相互の違いを覚えておくと良いでしょう。 。そして私たちの講義は終わりました :) 今日はいくつかの問題を解くことを忘れないでください! またね!:)
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION