Docs 菜单
Docs 主页
/ / /
C 驱动程序
/ /

流式传输 BSON

在此页面上

  • 从 BSON 流中读取
  • 写入 BSON 文档序列

bson_reader_t 提供了一个流式读取器,可以使用文件描述符或内存区域进行初始化。 bson_writer_t 提供了一个可以使用内存区域进行初始化的流式写入器。 (尚不支持将 BSON 流式传输到文件描述符。)

bson_reader_t 提供了一个方便的 API 来从文件描述符或内存缓冲区读取连续的 BSON 文档。 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 提供了一个便捷的 API,用于将一系列 BSONrealloc() 文档写入内存缓冲区,该缓冲区可随 增长。 bson_writer_begin 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 以了解更多信息。

后退

指南

来年

JSON