Transmissão de BSON
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 gravador 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. O bson_reader_read a função lerá para a frente no fluxo subjacente e retornará um bson_t que podem ser inspecionados e iterados.
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 mais informações.
Escrevendo uma sequência de documentos BSON
bson_writer_t fornece uma API conveniente para gravar uma sequência de documentos BSON em um buffer de memória que pode crescer com realloc()
. O bson_writer_begin e bson_writer_end As funções 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; }