C++ leveldb Slice的資料類型 不一定 必須是字串。也可以是二進位

來源:互聯網
上載者:User

先列出來參考 資料:

看這篇翻譯: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儲存 二進位 的例子。

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.