質問:開発者が独自のシリアル化形式を作成するのはどのくらい一般的ですか?具体的には、私はJavaを本質的に変数を区切るためにトークンを持つ巨大な文字列としてオブジェクトを送信しています。オブジェクトの送信/シリアル化のベストプラクティス
My Logic:言語の依存性(Javaの変更されたUTF-8を無視)がほとんどなく、オブジェクトバージョンの問題もないため、これを選択しました。Javaのシリアル化を使用すると、同じバージョンのオブジェクトであるため、古いバージョンで実行されているクライアントはオブジェクトデータのいずれも受信できません。コードはあまりにも醜いではありませんが、それは大丈夫ですが、私の質問は、このインスタンスのベストプラクティスは何ですか?これは個人的なプロジェクトのためのものです。
その他の既知の選択肢:これは、オブジェクトをネットワーク経由で送信するためにオブジェクトをシリアライズしていて、グーグルプロトコルバッファを使用していました。オブジェクトのシリアライズはどのように標準化されていますか?私は本質的にそれを行う3つの方法に出くわしました。 (私はここで私がそれをしたことからJavaについて話します)1)言語の(Javaの)ネイティブシリアライズクラスを使用する2)文字列とトークンを使用してオブジェクトを直列化する独自の方法を使用する3)プロトコルバッファを使用するか 1)速度/効率/サイズ 2)言語の独立性 3)バージョンの受け入れを:私はあなたが、本質的にシリアライズ時に達成するための3つの主な目標を持って集まってきたものから、いくつかの他の既知のフォーマット(JSON、XMLなど)
(古いバージョンのコードでは新しいバージョンの一部を引き続き受け入れることができます)
ほとんどの大規模ソフトウェアプロジェクトではプロトコルバッファを使用していますか?あなたのクライアントがリソースがはるかに少ないモバイルデバイスであれば変化しますか?
グラフを処理しますか? – bestsss
いいえ、オブジェクトは一般的にコンタクト情報(名前、#、アドレス)のようにかなり小さいです。私は文字列を使って自分自身の "シリアライズ"形式を書いています。私は名前と電話番号のようなオブジェクトの一部だけを送信/要求できるので、200〜300件の連絡先を要求するとかなり速くなります。 –
目標を忘れないでください:4)データを壊さないでください。明らかに分かりますが、区切り文字でテキストエンコーディングを作成するには、扱うべき古典的な問題があります(例えば、データに埋め込まれた区切り文字、その他の奇妙な文字など)。 – jtahlborn