1

データをエンコードするためのFASTのようなプロトコルは、送信する必要のあるデータの量を最小限に抑えるのに非常に賢いです。基本的に、char *を取得し、最初の数バイトを整数として読み取ると、残りのバイトをデコードする方法の指示を示すID番号が得られます(つまり、残りのバイトは、たとえば、int、文字列、unsigned int、別のunsigned int、ネストされたメッセージなど)と次の数バイトは、後続のフィールドが存在するかどうかを(各ビットで)示します。すべてのバイトの8番目のビットは、データ間の境界を示すために予約されています。

このようなプロトコルのデコードは、ビット操作(and、ors、shifts、ビットチェック)の線形トラバーサルなしでは実行できないようです...これをより高速に実行する方法はありますか?

4

2 に答える 2

2

今説明したよりも早くテクニックやアプローチを見つけることはできないと思います。このようなプロトコルは、それらを順番に解析することを目的としています。検索を続行する唯一の理由は、データを操作するためのより便利な方法を見つけることです。

私が見る限り、3つの方法があります。

  • あなたが以下に説明するようにそれをしてください
  • バイナリパーサーを持つBoost::Spiritなどの低レベルのフレームワークを使用します。
  • すぐに使用できるライブラリを使用してみてください。たとえば、QuickFAST-ネイティブC++および.NET用のFASTプロトコルの実装。
于 2012-06-09T04:47:52.583 に答える