bson_reader_t fornece um leitor de streaming que pode ser inicializado com um descritor de arquivo ou região de memória. bson_writer_t fornece um escritor de streaming que pode ser inicializado com uma região de memória. (Ainda não é suportada a transmissão de BSON para um descritor de arquivo.)
Lendo de um fluxo BSON
bson_reader_t fornece uma API conveniente para ler documentos BSON sequenciais de um descritor de arquivo ou buffer de memória. A função bson_reader_read lerá para a frente no fluxo subjacente e retornará um bson_t que pode ser inspecionado e iterado.
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; }
Consulte bson_reader_new_from_fd, bson_reader_new_from_file e bson_reader_new_from_data para obter mais informações.
Escrevendo uma sequência de documentos BSON
bson_writer_t fornece uma API conveniente para escrever uma sequência de documentos BSON em um buffer de memória que pode crescer realloc()
com. As funções bson_writer_begin e bson_writer_end gerenciarão o buffer subjacente enquanto criam a sequência de documentos.
Isso também pode ser útil se você quiser escrever em um pacote de rede enquanto serializa os documentos de uma linguagem de nível superior (mas faça isso logo após o cabeçalho dos pacotes).
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; }
Consulte bson_writer_new para obter mais informações.