如何将const void *转换为istream?

时间:2017-07-31 21:28:24

标签: c++ sqlite protocol-buffers

我试图解析存储在sqlite数据库中的协议缓冲区文件。我不太了解溪流,所以我被卡住了。这是我用来将文件插入sqlite的代码:

//Read file into a buffer
ifstream file(FileName, ios::in | ios::binary);
file.seekg(0, ifstream::end);
streampos size = file.tellg();
file.seekg(0);

char* buffer = new char[size];
file.read(buffer, size); // Later insert this buffer as blob to sqlite

//...
//relevant sqlite code
int buffer_size = sqlite3_column_int(stmt, 0); //size of the blob in bytes
const void* buffer = sqlite3_column_blob(stmt, 1); // blob data

要解析的协议缓冲区函数是

ParseFromIstream(std::istream * input)

所以真正的问题可能是如何将(const void *)转换为std :: istream?

1 个答案:

答案 0 :(得分:1)

在您的情况下,您不应该转换为流,因为这只会降低效率。 Protobuf有一个从数组中解析的方法,所以你应该使用它:

ProtobufObj obj;
obj.parseFromArray(static_cast<const char*>(buffer), buffer_size);