2017-07-31 115 views
-2

我想解析存儲在sqlite數據庫中的協議緩衝區文件。我對流的瞭解不多,所以我被困住了。下面是我使用的文件插入到源碼代碼:如何將const void *轉換爲istream?

//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) 

所以真正的問題可能是如何轉換(常量無效*)到std :: istream的?

回答

1

在你的情況下,你不應該轉換爲流,因爲這只是一個效率的損失。 Protobuf有一個解析數組的方法,所以這是你應該使用的:

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

我使用obj.ParseFromArray(buffer,buffer_size)。無需投射。感謝您指出該功能。 – Carl

相關問題