CodeGym /Java Blog /ランダム /Java シリアル化形式
John Squirrels
レベル 41
San Francisco

Java シリアル化形式

ランダム グループに公開済み
やあ!シリーズ化について話しましょう。おそらく、すでにシリアル化に関するレッスンを行ったことを覚えているでしょう。そして、私たちはそうしました:) これが最初のもので、これが2番目のものです。シリアル化がどのように機能するのか、シリアル化が必要な理由、およびシリアル化用に Java にどのようなツールがあるのか​​をよく覚えていない場合は、これらのレッスンを復習してください。今日のレッスンは理論についてです。シリアル化形式について詳しく見ていきます。まず、シリアル化とは何かを思い出してください。シリアル化は、オブジェクトの状態をバイトのシーケンスに保存するプロセスです。逆シリアル化は、これらのバイトからオブジェクトを復元するプロセスです。Java オブジェクトはシリアル化して、ネットワーク経由で (たとえば、別のコンピューターに) 送信できます。バイトのシーケンスはさまざまな形式で表現できます。この概念は、通常のコンピュータの使用からよく知られています。たとえば、電子書籍 (または単純なテキスト ドキュメント) は、さまざまな形式で作成できます。
  • docx (Microsoft Word 形式);
  • pdf (Adobe 形式);
  • mobi (Amazon Kindle デバイスで一般的に使用されます)。
  • などなど (ePub、djvu、fb2 など)。
いずれの場合も、目的は同じのようです。つまり、人間が読める形式でテキストを表示するということです。それでも、人々はさまざまなフォーマットを発明してきました。彼らの仕事の詳細に立ち入らなくても、彼らには正当な理由があったと推測できます。各形式には、他の形式と比較して独自の長所と短所があります。もしかしたら、これと同じ原則に従って、さまざまなシリアル化フォーマットが作成されたのでしょうか? 素晴らしい推測ですね、学生さん!:) まさにその通りです。実際には、有線 (または無線) でのデータ送信は困難な作業であり、多くの要素が関係します。データを送信しているのは誰ですか? どこへ?何巻ですか?受信者は人間ですか、それともコンピュータですか (つまり、データは人間が判読できる必要があります)。どのデバイスがデータを読み取るのでしょうか? 明らかに、これらの状況は異なります。500 KB の画像をあるスマートフォンから別のスマートフォンに送信することは別のことです。また、最適に圧縮してできるだけ早く送信する必要がある 500 テラバイトのビジネス データについて話している場合は、まったく別の話になります。主な連載形式を知り、それぞれの長所と短所を考えてみましょう。

JSON

JavaScript オブジェクト表記法。この形式についてはすでに少しはご存知でしょう。これについてはこのレッスンで説明し、ここではJSON へのシリアル化について説明しました。それには理由があってその名前が付けられました。JSON に変換された Java オブジェクトは、実際には JavaScript のオブジェクトとまったく同じように見えます。私たちのオブジェクトを理解するために JavaScript を理解する必要はありません。

{
   "title": "War and Peace",
   "author": "Lev Tolstoy",
   "year": 1869
}
単一のオブジェクトを送信することに限定されません。JSON 形式はオブジェクトの配列を表すこともできます。

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

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

 {
   "title": "The Seagull",
   "author": "Anton Chekhov",
   "year": 1896
 }
]
JSON は JavaScript オブジェクトを表すため、次の JavaScript データ形式をサポートします。
  • 文字列;
  • 数字。
  • オブジェクト。
  • 配列;
  • ブール値 (true と false);
  • ヌル。
JSON の利点は何ですか?
  1. 人間が読める形式。エンド ユーザーが人間である場合、これは明らかな利点です。たとえば、サーバーにフライトのスケジュールが含まれるデータベースがあるとします。人間の顧客は、自宅のコンピューターの前に座って、Web アプリケーションを使用してこのデータベースにデータを要求します。データを彼が理解できる形式で提供する必要があるため、JSON は優れたソリューションです。

  2. シンプルさ。とてもシンプルです:) 上では、2 つの JSON ファイルの例を示しました。また、JavaScript (ましてや JavaScript オブジェクト) について聞いたことがなくても、そこで説明されているオブジェクトの種類を簡単に理解できます。
    JSON ドキュメント全体は、いくつかの画像を含むWeb ページで構成されています。

  3. 幅広い用途。JavaScript は主要なフロントエンド言語であり、独自の要件があります。JSON の使用は必須です。したがって、膨大な数の Web サービスがデータ交換形式として JSON を使用しています。最新の IDE はすべて、JSON 形式 (IntelliJ IDEA を含む) をサポートしています。JSON の操作を可能にするために、あらゆる種類のプログラミング言語用に多数のライブラリが作成されています。

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

YAML

当初、YAML は「Yet Another Markup Language」の略でした。開始当初は、XML の競合相手として位置付けられていました。現在では、時間の経過とともに、YAML は「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 は人間が判読できるため、Web サイトyaml.org は通常の YAML ファイルです :)

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

  3. プログラミング言語のネイティブ データ構造のサポート。JSON や他の多くの形式に対する YAML の大きな利点は、さまざまなデータ構造をサポートしていることです。それらには次のものが含まれます。

    • !!map
      重複することができない、順序付けされていないキーと値のペアのセット。

    • !!omap
      重複できないキーと値のペアの順序付けされたシーケンス。

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

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

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

    これらの構造のいくつかは Java に見覚えがあるでしょう。:) これは、プログラミング言語のさまざまなデータ構造を YAML にシリアル化できることを意味します。

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

    これらのマーカーを使用すると、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)

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

位置ベースのプロトコル

状況によっては、送信するデータの量を大幅に減らす必要がある場合があります (たとえば、大量のデータがあり、負荷を軽減する必要がある場合)。この状況では、位置ベースのプロトコルを使用できます。つまり、パラメーター自体の名前なしでパラメーター値を送信できます。

"Leo Tolstoy" | "Anna Karenina" | 1873
この形式のデータは、完全な JSON ファイルよりも必要なスペースが数倍少なくなります。もちろん、他のシリアル化形式もありますが、今すぐそのすべてを知る必要はありません :) アプリケーションを開発するときに現在の業界標準形式をよく理解し、その利点と他の形式との違いを覚えておくと良いでしょう。別。これでレッスンは終了です :) 今日はいくつかのタスクを解決することを忘れないでください。次回まで!:)
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION