問題タブ [flatbuffers]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
927 参照

javascript - javascript配列をGoogleフラットバッファにシリアル化する方法は?

私はフラットバッファをグーグルするのは初めてです。

nodeJSを使用してWeb上で転送するために、オブジェクトの配列をシリアル化しようとしています。

最初に fbs ファイルを作成し、flatc でコンパイルします。

コンパイラは というファイルを生成しましたdrink_generated.js

次に、Nodejs で次のユーティリティ モジュールを作成しました。

今はhttps://google.github.io/flatbuffers/flatbuffers_guide_tutorial.htmlに基づいていますでバッファを閉じてから、 でバッファbuilder.finish(var)をフェッチする必要がありbuilder.dataBuffer()ます。

どの var を提供する必要があるかを理解するのに問題がありますbuilder.finish(var)

endDrink()この関数が、バッファーを閉じるために呼び出すことができる変数を返すことはわかっていますが、それは 1 つの Drink に対してだけです。そのバッファに多くのオブジェクトを挿入できるようにしたい。

それは可能ですか?私はそれを正しくやっていますか?

この問題に関する情報をいただければ幸いです。

0 投票する
1 に答える
604 参照

javascript - フラットバッファが定義されていません

Google フラット バッファを使用する nodeJs アプリケーションを作成しています。

macbook pro に flatc をインストールし、次のスキーマをコンパイルしました。

名前空間 MyAlcoholist;

スキーマ ファイルは drink.fbs と呼ばれ、drink_generated.js と呼ばれる JavaScript ファイルが生成されました。

このファイルを nodejs アプリケーションに含め、次のコードを使用してデータを追加します。これは私の flatBufferUtil.js ユーティリティ ファイルです。

この関数を実行すると、エラーで失敗しますflatbuffers is not defined

コードをデバッグしたところ、次のコード行にファイルがあることがわかりました。

addDrinkFlavorId 関数内に入ると、drinks_generted.js に次のコードが表示されます。

ご覧のとおり、使用していますflatbuffers.Long.ZEROが、フラットバッファはそのファイルでまったく定義されていません。コンパイルでエラーが発生しなかったので、何が欠けていますか?

0 投票する
1 に答える
263 参照

java - FlatBuffers BufferHasIdentifier は false を返します

Flatbuffers を使用して TCP 経由でデータを転送しようとしています。サーバーは Java ですが、クライアントは C# であるため、非常に複雑です。

私が使用しているスキーマは次のとおりです。

C# の送信方法:

Javaの受け取り方法:

扱う:

0 投票する
1 に答える
1465 参照

c++ - Flatbuffers エンコードしてからデコードする C++ double 配列 + テーブル + ユニオンはジャンクを返します

私はいくつかのフラットバッファメッセージに記入していますが、それらをエンコードしてからデコードすると、ジャンクが戻ってきます。余分な情報を避けるために完全なメッセージは含めていませんが、union コンポーネントの列挙値を正常に抽出できました。ただし、列挙型で識別される型を抽出しようとすると、出力した double 配列には、以下に示すようにジャンクが含まれています。

バッファの重要な部分は次のとおりです。

入出力:

JointState.fbs:

ArmControlState.fbs:

エンコード:

デコード:

0 投票する
1 に答える
3471 参照

c++ - フラットバッファ内の複数のルート テーブル

通信プロトコルを実装するために Flatbuffers をチェックしています。メッセージが受信されると、私の場合、いくつかの異なるテーブルが含まれている場合があります。私が正しく理解していれば、Flatbuffers でこれを達成する方法は、ユニオン内に可能なそれぞれ異なるテーブルを持つ「ルート」テーブルを使用することです。

私の場合、着信タイプは既にわかっています (タイプはヘッダーの一部です) => 必ずしも各タイプを単一のテーブル内に配置できる必要はありません。ただし、複数のテーブルを「ルート」タイプとしてマークすることはできないようです。Fooこれは、テーブルを定義した場合、デシリアライゼーションのメソッドまたはメソッドのBarいずれかのみを取得でき、両方を取得できないことを意味します。GetFoo()GetBar()

異なるスキーマ ファイル間で定義を分割することも可能であると想定していますが、それらはいくつかのサブクラスを共有するため、共通の定義用の共有スキーマ ファイルも必要になります。これは、単純なケースでは必要以上に複雑なようです。

Flatbuffers を使用して複数の異なる型を逆シリアル化できる別の方法はありますか?

0 投票する
1 に答える
1924 参照

java - ネットワーク経由で FlatBuffers ByteBuffer を送信するには?

FlatBuffersから ByteBufferをネットワーク経由で Android アプリケーションに送信したいと考えています。を使ってみecho $builder->sizedByteArrayたのですが、この文字列をデシリアライズする方法が気になります。

0 投票する
1 に答える
1962 参照

c++ - C++ で ZMQ 経由で送信された Flatbuffers オブジェクトを読み取ると未処理の例外がスローされる

ZMQ 経由でかなり大きな Flatbuffers オブジェクトをネットワーク経由で送信し、C++ を使用して読み取ろうとしています。オブジェクトにアクセスすると、解決方法がわからない未処理の例外が発生します。この最小限の例でさえ失敗します:

フラットバッファスキーマ:

REP ソケットを使用する main.cpp:

REQ ソケットを使用する main.cpp:

このコードは正常に実行され、各プログラムが受信している生のバッファが表示されます (私はそう思います)。不思議なことに、メッセージの内容は変わらないはずなのに、変わっていません。最後の 2 行のコメントを外して inmsg->testNumber() にアクセスしようとすると、次のエラー メッセージが表示されます。

以前に ZMQ を介して Flatbuffers オブジェクトを正常に送信したことがありますが、C++ でそれらを読み取ったことはありません。私はFlatbuffers のチュートリアルに厳密に従ったと確信していますが、明らかに何かがおかしくなっています。ポインタ?バッファサイズ?いずれにせよ、助けていただければ幸いです。


編集:受け入れられた回答に対する私のコメントを明確にするために、問題のある行は次のとおりです。

次のように変更する必要があります。

この質問を読んだ人は誰でも、後で FlatBufferBuilder 関数が正しい順序で呼び出されないときに発生するバグに遭遇したことを知りたいと思うかもしれません。Flatbuffers オブジェクトが構築される順序は明らかに重要です。それを見つけるのにしばらく時間がかかりました-初心者は気をつけてください。

0 投票する
2 に答える
549 参照

c++ - デバッグでフラットバッファのパフォーマンスを向上させる方法 (c++ MSVC)

生の構造体の代わりとして、社内でフラットバッファの使用を実験しています。シリアル化する必要があるクラスはかなり大きく、フラットバッファのシリアル化のオーバーヘッドは、デバッグ ビルドを実行するときに取り得る以上のものであることに気付きました。

次の簡単なテスト プログラムを使用して、自分の発見を再現しました (データ型は、製品コードのデータ型に似ています)。

デバッグで私のPCで実行するのに約40秒かかります(リリースで約400ms)。デバッグ ビルドのパフォーマンスを向上させる方法を探しています。プロファイリングでは、ほとんどの時間が std::vector コードに費やされていることが示されたので、_ITERATOR_DEBUG_LEVEL をゼロに設定してみましたが、パフォーマンスが大幅に向上することはありませんでした。

0 投票する
1 に答える
289 参照

c# - 古いバッファを新しいバッファにカプセル化する

だから私はこの種のスキームを持っています:

テーブル Sample には複数の文字列ベクトルがあり、そのインスタンスはかなり大きいです。サンプル インスタンスを含むファイル システムに多数のファイルがあり、作成に時間がかかりました。ここで、2 つのファイルをランダムに取得し、それらをメモリに読み込み、それらをカプセル化する新しい Request を作成したいと考えています。

私はc#で作業していますが、この行は機能します:

しかし、新しい Request インスタンスでそれらを参照する方法を見つけることができないようです。これらのバッファーをそのまま新しいビルダーに追加し、それらのオフセットをすべて同じビルダー内の新しい Request に渡す方法が必要です。新しいビルダーでもう一度ビルドするのは効率的ではありません。

どうすればこれを達成できますか?