Docs Menu
Docs Home
/ / /
C ドライバー
/ /

ストリーミング BSON

項目一覧

  • BSON Stream からの読み取り
  • BSON ドキュメントのシーケンスの書き込み

bson_reader_t は、 ファイル記述子またはメモリ リージョンで初期化できるストリーミング 読み取りを提供します。bson_writer_t は、メモリ領域で初期化できるストリーミング ライターを提供します。(ファイル記述子への BSON のストリーミングはまだサポートされていません。)

bson_reader_t は、ファイル記述子またはメモリ バッファから連続した BSON ドキュメントを読み取るのに便利な API を提供します。bson_reader_read 関数は基礎となるストリームを順に読み取り、 bson_t を返します 検査して反復処理できます。

#include <stdio.h>
#include <bson/bson.h>
int
main (int argc, char *argv[])
{
bson_reader_t *reader;
const bson_t *doc;
bson_error_t error;
bool eof;
reader = bson_reader_new_from_file ("mycollection.bson", &error);
if (!reader) {
fprintf (stderr, "Failed to open file.\n");
return 1;
}
while ((doc = bson_reader_read (reader, &eof))) {
char *str = bson_as_canonical_extended_json (doc, NULL);
printf ("%s\n", str);
bson_free (str);
}
if (!eof) {
fprintf (stderr,
"corrupted bson document found at %u\n",
(unsigned) bson_reader_tell (reader));
}
bson_reader_destroy (reader);
return 0;
}

詳細については 、 bson_reader_new_from_fd bson_reader_new_from_file bson_reader_new_from_data 詳しくは、 を参照してください。

bson_writer_t は、 BSON ドキュメントのシーケンスを で大きくなる可能性のあるメモリ バッファに書き込む便利な APIrealloc() を提供します。bson_writer_start および bson_writer_end 関数は、ドキュメントのシーケンスを構築するときに基礎となるバッファを管理します。

これは、より高いレベルの言語からドキュメントをシリアル化しながら、ネットワーク パケットに書き込みます(ただし、パケット ヘッダーの直後に行う場合)。

#include <stdio.h>
#include <bson/bson.h>
#include <assert.h>
int
main (int argc, char *argv[])
{
bson_writer_t *writer;
bson_t *doc;
uint8_t *buf = NULL;
size_t buflen = 0;
bool r;
int i;
writer = bson_writer_new (&buf, &buflen, 0, bson_realloc_ctx, NULL);
for (i = 0; i < 10000; i++) {
r = bson_writer_begin (writer, &doc);
assert (r);
r = BSON_APPEND_INT32 (doc, "i", i);
assert (r);
bson_writer_end (writer);
}
bson_free (buf);
return 0;
}

bson_writer_new を参照してください 詳しくは、 を参照してください。

戻る

ガイド