bson_reader_t は、 ファイル記述子またはメモリ リージョンで初期化できるストリーミング読み取りを提供します。 bson_writer_t は、メモリ領域で初期化できるストリーミングライターを提供します。 (ファイル記述子へのBSONのストリーミングはまだサポートされていません。)
BSON Stream からの読み取り
bson_reader_t は、ファイル記述子またはメモリ バッファから連続したBSONドキュメントを読み取るのに便利なAPIを提供します。 bson_reader_read 関数は、基礎となるストリームを順に読み取り、検査して反復処理できる bson_t を返します。
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 ドキュメントのシーケンスの書き込み
bson_writer_t は、 で大きくなる可能性のあるメモリ バッファにBSONドキュメントのシーケンスを書き込む便利なAPIを提供します。realloc()
bson_writer_begin 関数と bson_writer_end 関数は、ドキュメントのシーケンスを構築するときに基礎のバッファを管理します。
これは、より高いレベルの言語からドキュメントをシリアル化しながら、ネットワーク パケットに書き込みます(ただし、パケット ヘッダーの直後に行う場合)。
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 を参照してください。