bson_reader_t provides a streaming reader which can be initialized with a filedescriptor or memory region. bson_writer_t provides a streaming writer which can be initialized with a memory region. (Streaming BSON to a file descriptor is not yet supported.)
BSON 스트림에서 읽기
bson_reader_t provides a convenient API to read sequential BSON documents from a file-descriptor or memory buffer. The bson_reader_read function will read forward in the underlying stream and return a bson_t that can be inspected and iterated upon.
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; }
See bson_reader_new_from_fd, bson_reader_new_from_file, and bson_reader_new_from_data for more information.
BSON 문서 시퀀스 작성
bson_writer_t provides a convenient API to write a sequence of BSON documents to a memory buffer that can grow with realloc()
. The bson_writer_begin and bson_writer_end functions will manage the underlying buffer while building the sequence of documents.
이 기능은 상위 언어 에서 문서를 직렬화하는 동안 네트워크 패킷에 쓰기 (write) 싶은 경우에도 유용할 수 있습니다(단, 패킷 헤더 바로 뒤에 작성해야 함).
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; }
See bson_writer_new for more information.