bson_reader_t 提供了一个流媒体读取器,可以使用文件描述符或内存地区进行初始化。bson_writer_t 提供了一个可以使用内存地区进行初始化的流媒体写入器。(尚不支持将BSON流式传输到文件。)
从BSON流中读取
bson_reader_t 提供了一个方便的API ,用于从文件描述符或内存缓冲区读取连续的BSON文档。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 提供了一个便捷的API ,用于将一系列BSON文档写入内存缓冲区,该缓冲区可随 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。