言語に依存しないメカニズムで、ソケットまたは共有メモリを介してデータをシリアル化するメカニズムを検討しています。このデータは非常に構造化されており、エンコード/デコードの速度が非常に重要であるため、XMLの使用には消極的です。自由にライセンスされた優れたCAPIを使用することは重要ですが、理想的には、他の多くの言語をサポートする必要があります。私はグーグルのプロトコルバッファとASN.1を見てきました。私は正しい方向に進んでいますか?もっと良いものはありますか?独自のパック構造を実装するだけで、標準を探す必要はありませんか?
10 に答える
あなたの要件を考えると、私はGoogleProtocolBuffersを使います。アプリケーションに最適なようです。
XDR を考慮することができます。RFCがあります。私はそれを使用しましたが、パフォーマンスの問題は一度もありませんでした。これは ONC RPC で使用され、rpcgen というツールが付属しています。また、データをシリアル化したいだけの場合は、自分でジェネレーターを作成するのも簡単です (これは、移植性の理由から最終的に行ったもので、半日かかりました)。オープン ソースの C 実装がありますが、既にシステム ライブラリに含まれている可能性があるため、ソースは必要ありません。
ASN.1 は常に少しバロックに見えましたが、XDR にはいくつかの制限があるため、実際のニーズによっては ASN.1 の方が適切かもしれません。
このミックスに ASN.1 を投入したかっただけです。ASN.1 はフォーマット標準ですが、ほとんどの言語用のライブラリがあり、asn1cを介したC インターフェイスは、プロトコル バッファー用の C インターフェイスよりもはるかにクリーンです。
JSONは、この種のもので本当に私のお気に入りです。ただし、バイナリに関する経験はありません。JSON の使用を計画している場合は、結果を投稿してください。
ヘシアンをチェックしてください
Muscleもチェックしてください。かなりのことを行いますが、バイナリ形式にシリアル化します。
もう 1 つのオプションは、AOL が Oscar/AIM プロトコルで使用するSNAC/TLVです。
Binary XMLもありますが、まだ安定していないようです。私がリンクしている記事には、興味深いかもしれないリンクがたくさんあります。
考慮する必要があることはほとんどありません
1. Storage
2. Encoding Style (1 byte 2 byte)
3. TLV standards
ASN.1 パーサーは、バイナリ表現に適しています。ASN.1 は、ITU-T 内外で広く使用されている確立されたテクノロジです。この表記法は、多くのソフトウェア ベンダーによってサポートされています。