页首Html代码

返回顶部

C++ leveldb Slice的数据类型 不一定 必须是字符串。也可以是二进制

先列出来参考 资料:

看这篇翻译: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保存 二进制 的例子。

 

 

posted @ 2012-08-30 15:38  ayanmw  阅读(2697)  评论(1编辑  收藏  举报

页脚Html代码