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保存 二进制 的例子。
------------------------------------------------------------------------------------------------
一定要专业!本博客定位于 ,C语言,C++语言,Java语言,Android开发和少量的Web开发,之前是做Web开发的,其实就是ASP维护,发现EasyASP这个好框架,对前端后端数据库 都很感觉亲切啊。. linux,总之后台开发多一点。以后也愿意学习 cocos2d-x 游戏客户端的开发。