bson_reader_t proporciona un lector de streaming que puede inicializarse con un descriptor de archivo o una región de memoria. bson_writer_t proporciona un escritor de streaming que puede inicializarse con una región de memoria. (Aún no se admite la transmisión de BSON a un descriptor de archivo).
Leyendo desde un flujo BSON
bson_reader_t proporciona una API práctica para leer documentos BSON secuenciales desde un descriptor de archivo o un búfer de memoria. La función bson_reader_read leerá hacia adelante en el flujo subyacente y devolverá un bson_t que puede inspeccionarse e iterarse.
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 y bson_reader_new_from_data para obtener más información.
Cómo escribir una secuencia de documentos BSON
bson_writer_t proporciona una API conveniente para escribir una secuencia de documentos BSON en un búfer de memoria que puede crecer con realloc()Las funciones bson_writer_begin y bson_writer_end administrarán el búfer subyacente mientras construyen la secuencia de documentos.
Esto también podría ser útil si desea escribir en un paquete de red mientras serializa los documentos de un lenguaje de nivel superior (pero hágalo justo después del encabezado de los paquetes).
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; }
Consulta bson_writer_new para obtener más información.