先列出來參考 資料:
看這篇翻譯:http://duanple.blog.163.com/blog/static/70971767201171705113636/
Leveldb源碼分析4 Slice:http://www.kuqin.com/database/20110919/265041.html
Slice.h源碼:http://www.oschina.net/code/explore/leveldb/include/leveldb/slice.h
1 相比返回string,返回Slice的開銷會小的多(沒有拷貝,Slice中沒有實際資料,只有指向資料的指標,開銷低)。 2 leveldb允許key和value包含'\0',不能返回以null結尾的c風格字串。
對於上面兩點,第二點 可以包括\0?? 這就奇怪了,字串就是根據\0判斷的。那麼 如果二進位的話,就有太多的\0了。
於是 看到源碼分析關於 Slice的建構函式中
// Create an empty slice. Slice() : data_(""), size_(0) { } // Create a slice that refers to data[0,n-1]. Slice(const char* data, size_t n) : data_(data), size_(n) { } // Create a slice that refers to the contents of "s" Slice(const std::string& s) : data_(s.data()), size_(s.size()) { } // Create a slice that refers to s[0,strlen(s)-1] Slice(const char* s) : data_(s), size_(strlen(s)) { }
第二個 可以指定 一個 n,和一個char * 。
我們的二進位 一般就是 char * 類型的,只要可以指定n,那麼 其實就可以將二進位 放入 Slice中,也就可以放入 leveldb中了。
或許 我應該儘快 寫一個例子 來驗證一切。。。。。。
TODO:leveldb 通過Slice儲存 二進位 的例子。