SDS的概念
SDS:
保存了len和free属性,并保存了字节数组,同时以‘\0’结尾。
可以在改变字符串长度的时候,减少内存的分配次数,提高性能。
并且可以重用一部分c中的String Api.
- free属性为0,表示这个SDS没有未使用的空间。
- len的属性为5,表示这个SDS保存了5字节长的字符串。
- buf是一个char类型的数组,最后一个位置保存了’\0’(为了复用语言的api)。
JAVA实现
注:因为java中的String不需要以’\0’结尾,所以实现的时候没有存’\0’。
核心代码
/**
* 简单动态字符串SDS
* - 字节数组存储
* - 记录已经使用的空间
* - 保存还剩余的空间
*/
public class SDS {
//记录buf数组中已经使用的字节数量
int len;
//剩余的空间
int free;
//保存字符串
char buf[];
@Override
public String toString() {
return len > 0 ? new String(buf,0,len) : "";
}
//打印SDS信息
public void printDetail(){
System.out.println("========================");
System.out.println(" len is "+this.len);
System.out.println(" free is "+this.free);
System.out.println(" buf is "+Arrays.toString(buf));