2017-10-02 14 views
-2

xmlファイルをシリアライズするブーストシリアル化を使用する既存のCppがあるプロジェクトがあります。私は既存のCpを変更することは許されていないので、私はPythonで複製を行う必要があります。ブーストシリアル化で同じロジックを持つライブラリがPythonにありますか?Pythonでの同等のシリアライズ

ブーストシリアライゼーション

"22 serialization::archive 14 0 0 9 localhost 8888 0 0 0 0 1"

Psとのこの出力例。私はpickleを試しましたが、pickleの出力はboost serializationと同じではありません。

+0

私は、CPPファイルがxmlを解析してブーストアーカイブを使用してシリアル化する部分を見逃しています –

答えて

2

これはXMLのようには見えません。むしろBoostのテキストアーカイブ形式(チェックする必要があります)のように見えます。

あなたのオプションが含まれるように予定されています

  • あなたは
  • を書いたコードとテキストが(簡単にPythonで処理されます)XML
  • を使用するC++コードの作者を説得解析しますどちらも、Google Protocol BuffersやAvroなどのものを使用しています。これは、あなたやC++コードの作成者が実際にコードを書く必要がないため、最初は理想的な選択でした。異種システム(C++やPythonなど)を統合する計画を立てるときは、ジョブ用に設計された技術(たとえば、Googleプロトコルバッファ)、つまり異種性をサポートするものを選択する価値があります。

アーカイブ/ストリームを別の言語で読む必要がある場合、Boostシリアライズのような言語間直列化は一般に間違っています。これは、コードを書き書きする場所が2つあることを意味しますC++とPythonのあなたのケース)。その結果、努力が増え(コードを書く必要があります)、リスクが増大します(間違いを犯す可能性があります)。

逆に、スキーマ言語とコードジェネレータを持つシリアライゼーションテクノロジを使用すると、このすべての労力とリスクが完全になくなります。たとえば、GPBの場合、スキーマファイル(.proto)を作成し、それをC++コードとPythonコードの両方にコンパイルします。彼らはC++を使い、Pythonを使うでしょう。そして、あなたは自動的にその.protoファイルで指定された共通フォーマットから直列化/逆シリアル化します。

あなた自身の間で交換されるデータの内容を変更する必要がある場合は、スキーマを変更して再コンパイルします。あなたが書いたC++やPythonのコードは、(.protoで追加した余分なメッセージフィールドを考慮する以外に)変更する必要はありません。

+1

XMLアーカイブ形式は、テキスト形式と同じようにプロプライエタリです。したがって、パーサはそれをよく形成されたXML(うまくいけば)と読むが、有用に解釈することはほとんど不可能であろう。ブーストPythonまたはPy ++ 11を代わりに考えてください – sehe

+0

申し訳ありませんが、私はCPPファイルがxmlファイルを解析してからそれをシリアル化する部分が欠けていると思います。テキストアーカイブ形式であることは間違いありません。私たちがPythonのようにシリアライズを強化する必要があるのは、データの送受信だけを処理するプロセスを置き換える必要があるからです。何 <-> B <-> C C. B.を処理し、それを呼び出すことができ、それはプロセスにソケットとして送信されるシリアライズ/デシリアライズデータとプロセスA.プロセスAディールそれを呼び出して、Pythonのクラスに渡すことができプロセスAを削除する必要があります。データのシリアライズ/デシリアライズを処理するためにBを使用してください。 B <-> A –

+0

@はい、XMLは依然として独自のものですが、少なくともそれを解析するPythonライブラリがあります。ちょっとハーフウェイハウス! – bazza

関連する問題