如果我满足以下条件:
avro_value_set_string(field,value);
// where value is a char * (c-string)
那我如何将字节提供给avro?
文档中的内容如下:
avro_value_give_string_len(avro_value_t *field, avro_wrapped_buffer_t *src);
将把这些字节提供给avro,然后它将整理这些字节-我不再需要释放它们。
同时,它定义了avro_wrapped_buffer_t
:
typedef struct avro_wrapped_buffer {
const void *buf;
size_t size;
void (*free)(avro_wrapped_buffer_t *self);
int (*copy)(avro_wrapped_buffer_t *dest,
const avro_wrapped_buffer_t *src,
size_t offset, size_t length);
int (*slice)(avro_wrapped_buffer_t *self,
size_t offset, size_t length);
} avro_wrapped_buffer_t;
但是它没有提供初始化函数或其他有关如何构造avro_wrapped_buffer_t
的指示。
由于使用field
和branch
设置值仅在我简单定义它们并将它们传递给avro函数时起作用,因此我尝试了以下操作:
char * value = "something";
avro_wrapped_buffer_t buf;
buf.buf = value;
avro_value_give_string_len(field,&buf);
哪个没有用。如何利用avro缓冲区来避免将数据多余地复制到avro中?