如何将 const void* 转换为 istream?
How to convert const void* to istream?
我正在尝试解析存储在 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?
在您的情况下,您不应转换为流,因为那样只会降低效率。 Protobuf 有一个从数组解析的方法,所以这是你应该使用的方法:
ProtobufObj obj;
obj.parseFromArray(static_cast<const char*>(buffer), buffer_size);
我正在尝试解析存储在 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?
在您的情况下,您不应转换为流,因为那样只会降低效率。 Protobuf 有一个从数组解析的方法,所以这是你应该使用的方法:
ProtobufObj obj;
obj.parseFromArray(static_cast<const char*>(buffer), buffer_size);